Мне нужно запустить JDialog из родительского JFrame и сделать модальным.из JDialog мне нужно просмотреть другой JFrame (подкадр) и получить к нему доступ.но как только у нас открыто модальное диалоговое окно, мы не можем получить к нему доступ, поэтому есть ли обходной путь для доступа к подкадру, открытому из модального диалогового окна.
Вот фрагмент кода.Мне нужно получить доступ к кадру f1, открытому из модального диалогового окна j.
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class TestDialog {
public static void main(String[] args) {
TestDialog t=new TestDialog();
t.show();
}
void show(){
JFrame f = new JFrame("Simple Frame");
JTextField tf = new JTextField("Text");
tf.setPreferredSize(new Dimension(200, 100));
JButton b=new JButton("click me");
f.getContentPane().setLayout(new BorderLayout());
f.getContentPane() .add(tf, BorderLayout.NORTH);
f.getContentPane() .add(b, BorderLayout.CENTER);
f.setBounds(500, 400, 500, 500);
f.setVisible(true);
f.setDefaultCloseOperation(f.EXIT_ON_CLOSE);
final JDialog j=new JDialog();
j.setSize(200,300);
JPanel p=new JPanel();
JButton b1=new JButton("check me");
p.add(new JLabel("label me"));
p.add(b1);
j.getContentPane().add(p);
j.setDefaultCloseOperation(j.DISPOSE_ON_CLOSE);
j.setModal(true);
j.setLocationRelativeTo(f);
b.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
j.show(true);
}
});
final JFrame f1 = new JFrame("Sub Frame");
f1.getContentPane().setLayout(new BorderLayout());
f1.getContentPane() .add(new JLabel("label me"), BorderLayout.NORTH);
f1.setBounds(600, 500, 300, 300);
f1.setDefaultCloseOperation(f1.DISPOSE_ON_CLOSE);
b1.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
f1.setVisible(true);
}
});
}
}