我想在JDialog框中打开新的JDialog框。所以我已经使用该代码来防止来到祖先JFrame,但我面临的问题是在以前的JDialog框中打开新的JDialog框。请给我解决方案以摆脱这个问题。
以下是代码: -
TestbedWorkflow tbwf = new TestbedWorkflow();
JDialog dialog = new JDialog();
Dimension s = SOAStreamer.getSOAStreamerObj().getContentPanel().getSize();
dialog.setSize(s);
dialog.setTitle("TestBed Workflow Design");
dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
dialog.setModalityType(Dialog.ModalityType.APPLICATION_MODAL);
tbwf.setSize(s);
dialog.add(tbwf);
tbwf.updateUI();
dialog.setVisible(true);
TestbedWorkflow是JFrame,我已添加到JDialog box.now我想打开新的JDialog框。
提前致谢
答案 0 :(得分:1)
以下示例在APPLICATION_MODAL
层次结构中打开任意数量的对话框;只有最新的是可操作的。作为替代方案,请考虑一个无模式对话框,如here所示。
更新:下面的revised示例显示了对话框标题中的层次结构深度,并消除了一个伪子类。
import java.awt.Dialog;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
/**
* @see https://stackoverflow.com/a/12301243/230513
*/
public class DialogTest {
private static int index;
static class OpenAction extends AbstractAction {
public OpenAction() {
super("Open");
}
@Override
public void actionPerformed(ActionEvent e) {
JDialog jd = new JDialog();
jd.setTitle("D" + String.valueOf(++index));
jd.setModalityType(Dialog.ModalityType.APPLICATION_MODAL);
jd.add(new JButton(new OpenAction()));
jd.pack();
jd.setLocationRelativeTo(null);
jd.setVisible(true);
}
}
private void display() {
JFrame f = new JFrame("DialogTest");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add(new JButton(new OpenAction()));
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new DialogTest().display();
}
});
}
}