如何实现模态对话框的效果 - java

我有一个父窗口,它将启动另一个窗口。当子窗口启动时,我希望它像模式对话框一样显示。

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;


public class ModalDialogTest {
    public void createUI(){
        JFrame frame = new JFrame("Test");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setResizable(false);
        JPanel mainPanel = new JPanel();

        mainPanel.setBorder(BorderFactory.createEmptyBorder(200, 200, 200, 200));
        JButton openButton = new JButton("Open a frame");
        openButton.addActionListener(new ActionListener() { 
            @Override
            public void actionPerformed(ActionEvent e) {
                // TODO Auto-generated method stub
                AnotherWindow anotherWindow = new AnotherWindow();
                anotherWindow.createUI();
            }
        });
        mainPanel.add(openButton,BorderLayout.CENTER);

        frame.add(mainPanel,BorderLayout.CENTER);
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        ModalDialogTest modelDialogTest = new ModalDialogTest();
        modelDialogTest.createUI();
    }

    class AnotherWindow{
        public void createUI(){
            JFrame frame = new JFrame("Dialog");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setResizable(false);
            JPanel mainPanel = new JPanel();

            mainPanel.setBorder(BorderFactory.createEmptyBorder(100, 100, 100, 100));

            JLabel label = new JLabel("I want to be a modal dialog");
            mainPanel.add(label,BorderLayout.CENTER);

            frame.add(mainPanel,BorderLayout.CENTER);
            frame.pack();
            frame.setLocationRelativeTo(null);
            frame.setVisible(true);
        }
    }
}

上面的演示描述了我的应用程序的过程,并且架构是相同的,那么解决方案是什么?

参考方案

您不能设置JFrame的形式。第二个窗口必须是JDialog。因此,将第二个JFrame更改为JDialog并在其上使用方法setModalityType()

Java Swing SearchBox模型 - java

我需要使用Java Swing的搜索框,如果单击任何建议,当输入字母时它将显示来自数据库的建议,它将执行一些操作。如果有可能在Java swing中,请提供源代码提前致谢 java大神给出的解决方案 您可以使用DefaultComboBoxModel,输出将是这样。Try this在此代码中,您将找到countries数组,因此您需要从数据库中获取此数组。

java.awt.HeadlessException - java

JFileChooser chooser = new JFileChooser(); JDialog dialog=new JDialog(); dialog.setAlwaysOnTop(true); /*System.out.println("is always on top?"+dialog.isAlwaysOnTop());*/ …

Java-如何使Jtextfield充满整个框架 - java

我正在尝试使JTextArea填充整个框架,因此它看起来有点像记事本或textedit。也可以有一个滚动窗格。提前致谢!编辑:JTextArea 参考方案 试试这个 - -import java.awt.BorderLayout; import javax.swing.JFrame; import javax.swing.JTextField; public…

Swing-典型桌面应用程序中的并发 - java

这可能是一个广泛的问题,但我想知道单用户桌面应用程序通常在何处使用并发。您如何发现理想情况下(在设计阶段)并发问题?附注:从操作系统理论上来说,并发问题通常发生在无法共享资源(例如打印机)的情况下。不过,我仍然对在编程级别上可能发生的情况感到迷惑。 java大神给出的解决方案 Event Dispatch thread与其他逻辑之间的Swing中可能存在线程…

java:继承 - java

有哪些替代继承的方法? java大神给出的解决方案 有效的Java:偏重于继承而不是继承。 (这实际上也来自“四人帮”)。他提出的理由是,如果扩展类未明确设计为继承,则继承会引起很多不正常的副作用。例如,对super.someMethod()的任何调用都可以引导您通过未知代码的意外路径。取而代之的是,持有对本来应该扩展的类的引用,然后委托给它。这是与Eric…