Прежде всего, дизайн вашей программы выглядит немного не так, как если бы вы использовали JFrame для одного из ваших окон, где вы должны использовать JDialog, поскольку звучит так, как будто одно окно должно зависеть от другого.
Но независимо от того, вы передаете ссылки на объекты GUI так же, как вы бы делали стандартный код Java без GUI.Если одно окно открывает другое (второе часто является диалоговым окном), то первое окно обычно уже содержит ссылку на второе окно и может вызывать из него методы.Часто ключом является , когда заставляет первое окно вызывать методы второго, чтобы получить его состояние.Если второе является модальным диалоговым окном, то когда это просто - сразу после возврата диалога, который будет в коде сразу после того, как вы установите второе диалоговое окно видимым.Если это не модальное диалоговое окно, то вы, вероятно, захотите использовать какой-нибудь слушатель, чтобы знать, когда извлекать информацию.
Сказав это, все детали будут зависеть от структуры вашей программы, и вы 'Вам нужно будет рассказать нам больше об этом, если вам нужна более конкретная помощь.
Для простого примера, когда одно окно открыто, другое позволяет пользователю вводить текст в диалоговые окна JTextField, а затем помещает текст вJTextField первого окна, пожалуйста, посмотрите на это:
import java.awt.Window;
import java.awt.Dialog.ModalityType;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class WindowCommunication {
private static void createAndShowUI() {
JFrame frame = new JFrame("WindowCommunication");
frame.getContentPane().add(new MyFramePanel());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
// let's be sure to start Swing on the Swing event thread
public static void main(String[] args) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
createAndShowUI();
}
});
}
}
class MyFramePanel extends JPanel {
private JTextField field = new JTextField(10);
private JButton openDialogeBtn = new JButton("Open Dialog");
// here my main gui has a reference to the JDialog and to the
// MyDialogPanel which is displayed in the JDialog
private MyDialogPanel dialogPanel = new MyDialogPanel();
private JDialog dialog;
public MyFramePanel() {
openDialogeBtn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
openTableAction();
}
});
field.setEditable(false);
field.setFocusable(false);
add(field);
add(openDialogeBtn);
}
private void openTableAction() {
// lazy creation of the JDialog
if (dialog == null) {
Window win = SwingUtilities.getWindowAncestor(this);
if (win != null) {
dialog = new JDialog(win, "My Dialog",
ModalityType.APPLICATION_MODAL);
dialog.getContentPane().add(dialogPanel);
dialog.pack();
dialog.setLocationRelativeTo(null);
}
}
dialog.setVisible(true); // here the modal dialog takes over
// this line starts *after* the modal dialog has been disposed
// **** here's the key where I get the String from JTextField in the GUI held
// by the JDialog and put it into this GUI's JTextField.
field.setText(dialogPanel.getFieldText());
}
}
class MyDialogPanel extends JPanel {
private JTextField field = new JTextField(10);
private JButton okButton = new JButton("OK");
public MyDialogPanel() {
okButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
okButtonAction();
}
});
add(field);
add(okButton);
}
// to allow outside classes to get the text held by the JTextField
public String getFieldText() {
return field.getText();
}
// This button's action is simply to dispose of the JDialog.
private void okButtonAction() {
// win is here the JDialog that holds this JPanel, but it could be a JFrame or
// any other top-level container that is holding this JPanel
Window win = SwingUtilities.getWindowAncestor(this);
if (win != null) {
win.dispose();
}
}
}
Вы бы сделали очень похожую технику для получения информации из JTable.
И снова, если эта информация неЕсли вам это не поможет, расскажите, пожалуйста, подробнее о вашей программе, в том числе покажите нам часть своего кода.Лучший код для показа - небольшой компилируемый пример, SSCCE , аналогичный тому, что я выложил выше.