我需要從父JFrame啓動一個JDialog並使其成爲模態。從JDialog我需要查看另一個JFrame(子框架)並訪問它。但是一旦我們打開了模態對話框,我們就無法訪問,所以有沒有任何解決方法來訪問從模態對話框打開的子框架。從模態JDialog打開時激活JFrame
這裏是代碼片段。我需要訪問從j模式對話框打開的f1框架。
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);
}
});
}
}
我只是通過閱讀你的再次發帖,我現在在想我誤解了你。你說你有一個初始框架,它是對話框的父對象。它似乎相反,你有一個初始的TestDialog; TestDialog擴展JFrame嗎?另外,以一種叫做f,f1,tf,b,b1等的方式來跟蹤你的代碼是很困難的。儘管它很短,但這種神祕的命名方案仍然令人困惑。 – Loduwijk
目標父/子層次結構對我來說不是很清楚,但是您可能會受益於[DOCUMENT_MODAL]模態,這裏討論了這個模式(http://download.oracle.com/javase/tutorial/uiswing/misc/modality.html ) –