java模态_java – 如何在另一个模态JDialog之上创建一个模态的JDialog
我有一個模式設置對話框是一個JDialog.在這個設置窗口中,我將一些組件(包括一個按鈕)放置到另一個模式設置對話框,該對話框也是一個JDialog.我使他們成為JDialogs,因為這是我知道進行模態對話的唯一方法.
問題是這樣的:當我創建主設置對話框時,我必須構建JDialog,無需父幀或父幀.由于我的主窗口是一個JFrame,我可以把它傳遞給主設置對話框的構造函數.但是當我想創建第二個模態設置對話框時,應該將主設置對話框作為父項,我找不到一個方法來獲取JDialog的(J)框架.我確實希望通過這個主設置對話框作為父級,以便第二個設置對話框顯示在它上面.讓我們假設第二個設置對話框沒有用于傳遞位置的構造函數,只是JDialog的構造函數.
有沒有辦法得到JDialog的(J)框架?
我的設置是否存在設計缺陷,我應該用這些設置對話框中的其他內容嗎? (如果是這樣,我應該如何使這些替代設置對話框模態?)
感謝您的幫助,
埃里克
更新:
感謝大家的答案.他們讓我明白,顯然JDalog的所有者并不是絕對必要的.我認為這是對話框需要關閉所有者,直到對話框關閉,但顯然模式是獨立于所有者.我也注意到,即使是擁有者,對話框仍然不是所有者的中心,所以現在我的代碼就像:
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();
}
}
這也允許模態對話框中的模態對話框.
感謝你的幫助!
不確定你有什么問題,但這里是一個例子,你可以有多個模態對話框:
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();
}
});
}
}
總結
以上是生活随笔為你收集整理的java模态_java – 如何在另一个模态JDialog之上创建一个模态的JDialog的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机java语言答案_【计算机二级Ja
- 下一篇: java用符号断开取前面_java-如何