简体   繁体   中英

java - method and passing variable from jInternalFrame to jFrame

and I have the following problem. i am new in java and i am trying to send a variable which is user_id, from JInternalFrame to JFrame.

I can't use constructor because JFrame is the main program activated at startup and containing jDesktoPane

so i was trying to use the methods, however, can't do it (i posted the two methods, both of which I tried but did not work)

Method A)

Code in jFrame (Main_window)

public javax.swing.JTextField getID() {
  return jTextField_id;
}

public void setID(javax.swing.JTextField ID) 
{
jTextField_id = ID;
}

code in jInternalFrame

Main_window send = new Main_window(); 
send.getID().setText("123");

Method B)

Code in jFrame (Main_window) USER_ID is a variable accesible in any place of jFrame

public void setID(String ID) 
{
USER_ID = ID;
}

code in jInternalFrame

Main_window send = new Main_window(); 
send.setID("123");

both method don't change anything but have no errors in compilation

if there is any other way of doing it pls tell me :)

sorry for my language and grammar. if this help i use Eclipse compilator

this code worked for me, ty for help

public void set_ID(String ID) 
{
    Test_JF mainWindow = (Test_JF) this.getTopLevelAncestor();;
    mainWindow.setID(ID);
}

activated by set_ID("1234");

Try this in your JInternalFrame class:

JFrame mainWindow = (JFrame)this.getTopLevelAncestor();
mainWindow.setID("123");

ok so here is smaller version of my program "Test_JF" is a main JFrame and "Test_JIF" is a JInternalFrame

here is 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;
}}

here is 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);

}}

i clear imports here(on web) so it will be cleaner

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM