我有一个带有按钮的JDialog,可以打开一个新窗口。我想要做的是每当其他窗口打开时阻止这个JDialog。当我说阻止时,我的意思是用户无法操纵它,不能移动它或最大化或任何东西。
顺便说一句,是否建议将JDialog用于带按钮和表格的窗口?当我必须使用哪个框架时,我仍然没有得到它!
这就是我所拥有的:
public class Platos extends JDialog {
private final JPanel contentPanel = new JPanel();
public static void main(String[] args) {
try {
Platos dialog = new Platos();
dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
dialog.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
public Platos() {
setBounds(100, 100, 450, 300);
getContentPane().setLayout(new BorderLayout());
contentPanel.setLayout(new FlowLayout());
contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5));
getContentPane().add(contentPanel, BorderLayout.CENTER);
{
JButton btnAgregarPlato = new JButton("Agregar Plato");
btnAgregarPlato.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
AgregarPlato ap = new AgregarPlato();
ap.setVisible(true);
}
});
btnAgregarPlato.setFont(new Font("Tahoma", Font.PLAIN, 11));
contentPanel.add(btnAgregarPlato);
}
}
}
答案 0 :(得分:3)
JDialog确实是正确的选择。
要阻止父窗口,你必须向Platos添加一个构造函数,它将使用带有 parent 框架的JDialog
构造函数:
JDialog dlg = new JDialog(parentWindow, modality);
parentWindow
通常是JFrame。
你这样做:
public Platos(JFrame parent) {
super(parent, ModalityType.APPLICATION_MODAL);
....
诀窍是ModalityType.APPLICATION_MODAL
参数,它使对话框阻止所有其他对话框和成为主框架。
您可以将主窗口作为父级传递,即使您从另一个窗口打开对话框也可以正常工作 - 最后一个阻止所有以前的对话框。
有关详细信息,请参阅docs。