und ich habe folgendes problem. Ich bin neu in Java und ich versuche, eine Variable, die user_id ist, von JInternalFrame an JFrame zu senden.
Ich kann keinen Konstruktor verwenden, da JFrame das Hauptprogramm ist, das beim Start aktiviert wird und jDesktoPane enthält
Ich habe versucht, die Methoden zu verwenden, kann es aber nicht. (Ich habe die beiden Methoden veröffentlicht, die ich beide ausprobiert habe, aber nicht funktioniert haben.)
Methode A)
Code in jFrame (Hauptfenster)
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");
Methode B)
Code in jFrame (Hauptfenster) USER_ID ist eine Variable, auf die an jeder Stelle von jFrame zugegriffen werden kann
public void setID(String ID)
{
USER_ID = ID;
}
Code in jInternalFrame
Main_window send = new Main_window();
send.setID("123");
beide Methoden ändern nichts, haben aber keine Fehler bei der Kompilierung
Wenn es eine andere Möglichkeit gibt, sag es mir bitte :)
Entschuldigung für meine Sprache und Grammatik. Wenn dies hilft, verwende ich Eclipse Compilator
Dieser Code hat bei mir funktioniert
public void set_ID(String ID)
{
Test_JF mainWindow = (Test_JF) this.getTopLevelAncestor();;
mainWindow.setID(ID);
}
aktiviert durch set_ID ("1234");
Antworten:
0 für die Antwort № 1Versuchen Sie dies in Ihrer JInternalFrame-Klasse:
JFrame mainWindow = (JFrame)this.getTopLevelAncestor();
mainWindow.setID("123");
0 für die Antwort № 2
ok also hier ist eine kleinere version meines programms "Test_JF" ist ein Haupt-JFrame und "Test_JIF" ist ein JInternalFrame
Hier ist 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;
}}
Hier ist 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);
}}
Ich lösche Importe hier (im Web), damit es sauberer wird