我有两个类  在同一个包中   主窗体Test2   子窗体StuAddDialog   Test2中有个JTable控件 jt1   我想在SutAddDialog中访问jt1   请问如何做  谢谢    
  public class Test2 extends JFrame implements ActionListener { /**
 * @param args
 */

JPanel jp1,jp2;
JLabel jl1;
JButton jb1,jb2,jb3,jb4,jb5;
JTable jt1;
JScrollPane jsp;
JTextField jtf;

public static void main(String[] args) {
// TODO Auto-generated method stub

Test2 t2=new Test2(); }

public Test2()
{
//第一部分
jp1=new JPanel();
jl1=new JLabel("请输入名字");
jtf=new JTextField(10);
jb1=new JButton("查询");
jb1.addActionListener(this);

jp1.add(jl1);
jp1.add(jtf);
jp1.add(jb1);

//第三部分
jp2=new JPanel();
jb2=new JButton("添加 ");
jb2.addActionListener(this);
jb3=new JButton("删除 ");
jb4=new JButton("修改 ");
jb5=new JButton("刷新");
jb5.addActionListener(this);

jp2.add(jb2);
jp2.add(jb3);
jp2.add(jb4);
jp2.add(jb5);

//中间部分
//创建一个数据模型对象
StuModel sm=new StuModel();

jt1=new JTable(sm);*************************
jsp=new JScrollPane(jt1);

this.add(jsp);
this.add(jp1,"North");
this.add(jp2,"South");

this.setSize(400, 300);
this.setLocation(360, 270);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

public JTable GetJTable()
{
return this.jt1;
}******************************************************************************
public class StuAddDialog extends JDialog implements ActionListener {

JLabel jl1,jl2,jl3,jl4,jl5;
JButton jb1,jb2;
JTextField jtf1,jtf2,jtf3,jtf4,jtf5;
JPanel jp1,jp2,jp3;


public StuAddDialog(Frame owner, String title, boolean modal)
{
jl1=new JLabel("学号");
jl2=new JLabel("姓名");
jl3=new JLabel("性别");
jl4=new JLabel("年龄");
jl5=new JLabel("籍贯");

jb1=new JButton("添加");
jb2=new JButton("取消");

jtf1=new JTextField(10);
jtf2=new JTextField(10);
jtf3=new JTextField(10);
jtf4=new JTextField(10);
jtf5=new JTextField(10);

jp1=new JPanel();
jp2=new JPanel();
jp3=new JPanel();

jp1.setLayout(new GridLayout(5,1));
jp2.setLayout(new GridLayout(5,1));

jp1.add(jl1);
jp1.add(jl2);
jp1.add(jl3);
jp1.add(jl4);
jp1.add(jl5);

jp2.add(jtf1);
jp2.add(jtf2);
jp2.add(jtf3);
jp2.add(jtf4);
jp2.add(jtf5);

jp3.add(jb1);
jp3.add(jb2);

this.add(jp1,BorderLayout.WEST);
this.add(jp2,BorderLayout.CENTER);
this.add(jp3,BorderLayout.SOUTH);

jb1.addActionListener(this);
jb2.addActionListener(this);

this.setSize(300,200);
this.setLocation(180, 140);
this.setVisible(true);

} @Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub

if (arg0.getSource()==jb1)
{
Connection ct=null;
PreparedStatement ps=null;
ResultSet rs=null;

try {

Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");

ct=DriverManager.getConnection
("jdbc:microsoft:sqlserver://127.0.0.1:1433;databaseName=spdb1","sa","sa");

ps=ct.prepareStatement("insert into student values(?,?,?,?,?)");

ps.setString(1, jtf1.getText());
ps.setString(2, jtf2.getText());
ps.setString(3, jtf3.getText());
ps.setString(4, jtf4.getText());
ps.setString(5, jtf5.getText());


int i=ps.executeUpdate();

if (i==1)
{
System.out.println("添加成功!");

//刷新数据************************就是这里的jt1访问不了
//StuModel sm=new StuModel("");

//jt1.setModel(sm);

} else 
{
System.out.println("添加失败!");
}
} catch (Exception e) {
e.printStackTrace();
} finally {

try {
if (rs!=null)
{
    rs.close();
}
if (ps!=null)
{
ps.close();
}
if (ct!=null)
{
ct.close();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
else if (arg0.getSource()==jb2)
{
this.dispose();
}
}}

解决方案 »

  1.   

    一个笨办法,把第一个窗体的控件当参数传递给第二个窗体。不过最好是第二个窗体另外自己去获得需要的数据,不要再引用第一个窗体中的数据。因为如果第一个窗体的内容有改变会影响第二个窗体,这样两个窗体的耦合度就高了,这样就不好了。以下给出土办法的例子:import javax.swing.JButton;
    import javax.swing.JFrame;class Test extends JFrame {

    Test(JButton bt) {
    setTitle("Test1");
    this.setDefaultCloseOperation(EXIT_ON_CLOSE);
    this.setSize(500, 300);
    this.setVisible(true);
    add(bt);
    }

    public static void main(String[] args) {
    Test2 t2 = new Test2();
    new Test(t2.bt);
    }
    }class Test2 extends JFrame{
    JButton bt;
    Test2() {
    setTitle("Test2");
    bt = new JButton("来自Test2");
    }
    }
      

  2.   

    方法很多,例如你把 jt1最为参数参数传进去(构造函数的参数),也可以将jt1设定为public static ,等等