我有一个带有打开新窗口的按钮的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);
}
}
}
最佳答案
JDialog确实是正确的选择。
要使其阻塞父窗口,您必须向Platos添加一个构造函数,该构造函数将在父框架中使用JDialog
构造函数:
JDialog dlg = new JDialog(parentWindow, modality);
其中
parentWindow
通常是JFrame。您可以这样操作:
public Platos(JFrame parent) {
super(parent, ModalityType.APPLICATION_MODAL);
....
诀窍是
ModalityType.APPLICATION_MODAL
参数,它使您的对话框阻止所有其他对话框和主框架。您可以将父窗口作为父窗口传递,即使您从另一个窗口打开该对话框也可以正常工作-最后一个窗口阻止所有先前的窗口。
有关更多参考,请参见docs。