java模态_java – 如何在另一个模态JDialog之上创建一个模态的JDialog
我有一個(gè)模式設(shè)置對話框是一個(gè)JDialog.在這個(gè)設(shè)置窗口中,我將一些組件(包括一個(gè)按鈕)放置到另一個(gè)模式設(shè)置對話框,該對話框也是一個(gè)JDialog.我使他們成為JDialogs,因?yàn)檫@是我知道進(jìn)行模態(tài)對話的唯一方法.
問題是這樣的:當(dāng)我創(chuàng)建主設(shè)置對話框時(shí),我必須構(gòu)建JDialog,無需父幀或父幀.由于我的主窗口是一個(gè)JFrame,我可以把它傳遞給主設(shè)置對話框的構(gòu)造函數(shù).但是當(dāng)我想創(chuàng)建第二個(gè)模態(tài)設(shè)置對話框時(shí),應(yīng)該將主設(shè)置對話框作為父項(xiàng),我找不到一個(gè)方法來獲取JDialog的(J)框架.我確實(shí)希望通過這個(gè)主設(shè)置對話框作為父級,以便第二個(gè)設(shè)置對話框顯示在它上面.讓我們假設(shè)第二個(gè)設(shè)置對話框沒有用于傳遞位置的構(gòu)造函數(shù),只是JDialog的構(gòu)造函數(shù).
有沒有辦法得到JDialog的(J)框架?
我的設(shè)置是否存在設(shè)計(jì)缺陷,我應(yīng)該用這些設(shè)置對話框中的其他內(nèi)容嗎? (如果是這樣,我應(yīng)該如何使這些替代設(shè)置對話框模態(tài)?)
感謝您的幫助,
埃里克
更新:
感謝大家的答案.他們讓我明白,顯然JDalog的所有者并不是絕對必要的.我認(rèn)為這是對話框需要關(guān)閉所有者,直到對話框關(guān)閉,但顯然模式是獨(dú)立于所有者.我也注意到,即使是擁有者,對話框仍然不是所有者的中心,所以現(xiàn)在我的代碼就像:
public class CustomDialog extends JDialog {
public CustomDialog(String title) {
setModal(true);
setResizable(false);
setTitle(title);
buildGUI();
}
public Result showDialog(Window parent) {
setLocationRelativeTo(parent);
setVisible(true);
return getResult();
}
}
這也允許模態(tài)對話框中的模態(tài)對話框.
感謝你的幫助!
不確定你有什么問題,但這里是一個(gè)例子,你可以有多個(gè)模態(tài)對話框:
import java.awt.BorderLayout;
import java.awt.Window;
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.SwingUtilities;
public class TestDialog {
protected static void initUI() {
JPanel pane = newPane("Label in frame");
JFrame frame = new JFrame("Title");
frame.setDefaultCloSEOperation(JFrame.EXIT_ON_CLOSE);
frame.add(pane);
frame.pack();
frame.setVisible(true);
}
public static JPanel newPane(String labelText) {
JPanel pane = new JPanel(new BorderLayout());
pane.add(newLabel(labelText));
pane.add(newButton("Open dialog"),BorderLayout.SOUTH);
return pane;
}
private static JButton newButton(String label) {
final JButton button = new JButton(label);
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Window parentWindow = SwingUtilities.windowForComponent(button);
JDialog dialog = new JDialog(parentWindow);
dialog.setLocationRelativeTo(button);
dialog.setModal(true);
dialog.add(newPane("Label in dialog"));
dialog.pack();
dialog.setVisible(true);
}
});
return button;
}
private static JLabel newLabel(String label) {
JLabel l = new JLabel(label);
l.setFont(l.getFont().deriveFont(24.0f));
return l;
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
initUI();
}
});
}
}
總結(jié)
以上是生活随笔為你收集整理的java模态_java – 如何在另一个模态JDialog之上创建一个模态的JDialog的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机java语言答案_【计算机二级Ja
- 下一篇: java io 输出流_Java IO