ورود

View Full Version : سوال: سوال در مورد متد های ستر و گتر



Sina.iRoid
سه شنبه 29 مهر 1393, 09:20 صبح
سلام دوستان. ممنون میشم اگر راهنماییم کنید.

من دارم یه برنامه ای می نویسم که فیلد های کلاسم و به صورت private تعریف کردم و می خوام با استفاده از متد های ستر و گتر به این فیلد ها در کلاس های دیگه دسترسی داشته باشم. کد هایی که نوشتم به شکل زیره:

کد کلاس FiledClass:


import java.awt.Container;
import java.awt.FlowLayout;


import javax.swing.JButton;




public class FiledClass {

private JButton leftButton; //button to set alignment left
private JButton centerButton; //button to set alignment center
private JButton rightButton; //button to set alignment right
private FlowLayout layout; //layout object
private Container container; //container to set layout

//getter and setter
public JButton getLeftButton(){
return leftButton;
}
public void setLeftButton(JButton leftButton){
this.leftButton = new JButton("Left");

}
public JButton getCenterButton(){
return centerButton;
}
public void setCenterButton(JButton centerButton){
this.centerButton = new JButton("Center");
}
public JButton getRightButton(){
return rightButton;
}
public void setRightButton(JButton rightButton){
this.rightButton = new JButton("Right Button");
}
public FlowLayout getLayout(){
return layout;
}
public void setLayout(FlowLayout layout){
this.layout = new FlowLayout();
}
public Container getContainer(){
return container;
}
public void setContainer(Container container){
this.container = new Container();
}
}


کد کلاس FlowLayoutFrame:


import javax.swing.JFrame;


@SuppressWarnings("serial")
public class FlowLayoutFrame extends JFrame{

private FiledClass ob;

//first constructor
public FlowLayoutFrame(FiledClass ob) {
this.ob = ob;
}

//second constructor
public FlowLayoutFrame() {
super("Flowlayout Demo");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(ob.getLayout());

add(ob.getLeftButton());

setSize(300, 300);
setVisible(true);
}
}


و این هم کد کلاس اصلی:


public class DriverClass {

public static void main(String[] args) {

new FlowLayoutFrame();
}
}


من الان می خوام در کلاس FlowLayoutFrame به button ها و layout دسترسی داشته باشم که بتونم روی فریم add کنم. اما نمیشه. NullPointerException میده.
نمی فهمم که مشکل از کجاست. ممنون اگر راهنماییم کنید.

محمد فدوی
سه شنبه 29 مهر 1393, 10:04 صبح
کدهات ایراد دارن. مثلا توی کلاس FiledClass شما باید توی تابع سازنده به leftButton، centerButton و... مقدار دهی کنی. در ضمن موقع ساختن نمونه از FlowLayoutFrame شما هیچ نمونه‌ای از کلاس FiledClass بش نمیدی و ob مقدارش null میشه.
برای اصلاح میتونی کدت رو به اینصورتی که من میگم تغییر بدی:


import java.awt.Container;
import java.awt.FlowLayout;
import javax.swing.JButton;

public class FiledClass {
private JButton leftButton = new JButton("Left Button");
private JButton centerButton = new JButton("Center Button");
private JButton rightButton = new JButton("Right Button");
private FlowLayout layout = new FlowLayout();
private Container container = new Container();


public JButton getLeftButton() { return leftButton; }
public JButton getCenterButton() { return centerButton; }
public JButton getRightButton() { return rightButton; }
public FlowLayout getLayout() { return layout; }
public Container getContainer() { return container; }
}
import javax.swing.JFrame;

@SuppressWarnings("serial")
public class FlowLayoutFrame extends JFrame {
public FlowLayoutFrame(FiledClass fc) {
super("Flowlayout Demo");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(fc.getLayout());

add(fc.getLeftButton());
add(fc.getCenterButton());
add(fc.getRightButton());


setSize(300, 300);
setVisible(true);
}
}
public class DriverClass {
public static void main(String[] args) {
FiledClass fc = new FiledClass();
new FlowLayoutFrame(fc);
}
}

این باید درست اجرا شه.