我有以下问题。 我是java的新手,我正在尝试将一个变量user_id从JInternalFrame发送到JFrame。
我无法使用构造函数,因为JFrame是在启动时激活并包含jDesktoPane的主程序
所以我试图使用这些方法,然而,不能这样做(我发布了两种方法,我试过但都没有用)
方法A)
jFrame(Main_window)中的代码
public javax.swing.JTextField getID() {
return jTextField_id;
}
public void setID(javax.swing.JTextField ID)
{
jTextField_id = ID;
}
jInternalFrame中的代码
Main_window send = new Main_window();
send.getID().setText("123");
方法B)
jFrame(Main_window)中的代码 USER_ID是可在jFrame
的任何位置访问的变量public void setID(String ID)
{
USER_ID = ID;
}
jInternalFrame中的代码
Main_window send = new Main_window();
send.setID("123");
这两种方法都不会改变任何东西,但在编译中没有错误
如果还有其他办法,请告诉我:)
抱歉我的语言和语法。 如果这有帮助我使用Eclipse编译器此代码对我有用,求助
public void set_ID(String ID)
{
Test_JF mainWindow = (Test_JF) this.getTopLevelAncestor();;
mainWindow.setID(ID);
}
由set_ID(“1234”)激活;
答案 0 :(得分:0)
在JInternalFrame类中尝试:
JFrame mainWindow = (JFrame)this.getTopLevelAncestor();
mainWindow.setID("123");
答案 1 :(得分:0)
好的,所以这是我的程序的较小版本 " Test_JF"是一个主要的JFrame和" Test_JIF"是一个JInternalFrame
这是TestJF
public class Test_JF extends JFrame {
private JPanel contentPane;
private JTextField user_id;
String USER_ID;
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Test_JF frame = new Test_JF();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
public Test_JF() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 750, 500);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
user_id = new JTextField();
user_id.setBounds(338, 11, 86, 20);
contentPane.add(user_id);
user_id.setColumns(10);
JButton button_user_id = new JButton("fill user id");
button_user_id.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
user_id.setText(USER_ID);
}
});
button_user_id.setBounds(239, 10, 89, 23);
contentPane.add(button_user_id);
JDesktopPane desktopPane = new JDesktopPane();
desktopPane.setBounds(10, 56, 714, 395);
contentPane.add(desktopPane);
addWindowListener(new WindowAdapter() {
@Override
public void windowOpened(WindowEvent arg0) {
Test_JIF Open = new Test_JIF();
desktopPane.add(Open);
Open.show();
}
});
}
public void setID(String ID)
{
USER_ID = ID;
}}
这是TestJIF
public class Test_JIF extends JInternalFrame {
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Test_JIF frame = new Test_JIF();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
public Test_JIF() {
Test_JF mainWindow = (Test_JF)this.getTopLevelAncestor();
setBounds(100, 100, 328, 199);
getContentPane().setLayout(null);
JButton button_send = new JButton("New button");
button_send.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
mainWindow.setID("123");
}
});
button_send.setBounds(111, 73, 89, 23);
getContentPane().add(button_send);
}}
我清除这里的导入(在网上)所以它会更清洁