java中不同窗体的控件访问

BOBI1201 2010-09-26 01:26:46
我有两个类 在同一个包中 主窗体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();
}
}

}


...全文
84 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaochun91103 2010-09-26
  • 打赏
  • 举报
回复
传引用不是一个好的办法。你还是在第二个窗体主动去获得数据源,不要去引用第一个窗体的内容。
BOBI1201 2010-09-26
  • 打赏
  • 举报
回复
一楼的方法是对的 但是我想有没有更好的办法
guangzhi0633 2010-09-26
  • 打赏
  • 举报
回复
方法很多,例如你把 jt1最为参数参数传进去(构造函数的参数),也可以将jt1设定为public static ,等等
BOBI1201 2010-09-26
  • 打赏
  • 举报
回复
请问如何传引用
youjianbo_han_87 2010-09-26
  • 打赏
  • 举报
回复
传引用。。。。。
xiaochun91103 2010-09-26
  • 打赏
  • 举报
回复
一个笨办法,把第一个窗体的控件当参数传递给第二个窗体。不过最好是第二个窗体另外自己去获得需要的数据,不要再引用第一个窗体中的数据。因为如果第一个窗体的内容有改变会影响第二个窗体,这样两个窗体的耦合度就高了,这样就不好了。

以下给出土办法的例子:

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");
}
}

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧