Swing:如何打开新对话框并将其附加到现有框架中?

时间:2014-04-10 11:48:48

标签: java swing jframe jdialog glasspane

我有一个框架,有时会打开一个对话框。我希望将此对话框附加到现有框架,例如,当我拖动该框架时,打开的对话框将跟随它。我听说使用GlassPane可以实现这一点,但我需要一些提示。现在,当我打开一个新对话框并设置相对于frame的位置时,它看起来像这样:

enter image description here

  1. 我想要" testDialog"显示在右上角的框架旁边。
  2. 当我拖动"测试"框架," testDialog"跟着它。
  3. 这是一个有效的例子:

    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    
    public class Example {
    
        public static void main(String[] args) {
            SwingUtilities.invokeLater(new Runnable() {
                @Override
                public void run() {
                    showGUI();
                }
            });
        }
    
        public static void showGUI() {
            final JFrame frame=new JFrame("test");
            JButton open=new JButton("Open new dialog");
            open.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    System.out.println("test");
                    JDialog dialog=new JDialog((Frame)null,"testdialog");
                    dialog.setPreferredSize(new Dimension(200,300));
                    dialog.getContentPane().add(new JLabel("testlabel"));
                    dialog.pack();
                    dialog.setLocationRelativeTo(frame);
                    dialog.setVisible(true);
                }
            });
            frame.setLayout(new FlowLayout());
            frame.getContentPane().add(open);
            frame.getContentPane().add(new JLabel("test"));
            frame.setLocationRelativeTo(null);
            frame.setPreferredSize(new Dimension(400, 200));
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.pack();
            frame.setVisible(true);
        }
    
    }
    

0 个答案:

没有答案