【问题标题】:JDialog moves upwards everytime it is openedJDialog每次打开时向上移动
【发布时间】:2014-10-25 23:47:24
【问题描述】:

我有一个 JDialog,它通过在 JFrame 中单击按钮打开。每次我关闭 JDialog 并再次单击并打开 JDialog 时,它都会在屏幕中向上移动(大约 30 像素)。我尝试修复框架位置,使用 setLocationRelativeTo(null) 并尝试使用 Toolkit.getDefaultToolkit().getScreenSize(); 修复它但它不起作用。它只是向上移动,直到它位于屏幕顶部。为什么会这样?

    // Play Hook Frame
    hookDialog = new JDialog(frame, "Play Hook", true);
    hookDialog.setSize(450, 250);
    hookDialog.setLocation(dim.width / 2 - hookDialog.getSize().width / 2,
            dim.height / 2 - hookDialog.getSize().height / 2);
    hookDialog.getContentPane().setBackground(bgColor);
    hookDialog.setResizable(false);
    hookDialog.getContentPane().setLayout(null);

    ...

    JButton btnPlayHook = new JButton("Play Hook");
    customizeButton(btnPlayHook);
    btnPlayHook.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            if (!isHookPressed) {
                JOptionPane.showMessageDialog(frame,
                        "Please press Find Hook button first", "Error",
                        JOptionPane.ERROR_MESSAGE);
            } else {
                for (int i = 0; i < hooks.size(); i++) {
                    int intMin1 = (int) (hooks.get(i).getStartTime() / 60);
                    int intMin2 = (int) (hooks.get(i).getEndTime() / 60);
                    int intSec1 = (int) (hooks.get(i).getStartTime() % 60);
                    int intSec2 = (int) (hooks.get(i).getEndTime() % 60);
                    String min1 = intMin1 + " min";
                    String min2 = intMin2 + " min";
                    String sec1 = intSec1 + " sec";
                    String sec2 = intSec2 + " sec";
                    String elem = "Hook" + (i + 1) + ": " + min1 + " "
                            + sec1 + " - " + min2 + " " + sec2;
                    if (!listElements.contains(elem))
                    listElements.addElement(elem);
                }
                hookDialog.setVisible(true);
            }
        }
    });

【问题讨论】:

  • 不看代码不可能知道。
  • 为了尽快获得更好的帮助,请发布MCVE(最小完整可验证示例)。
  • @Java42 我已经添加了相关部分。
  • @Java42 请求“一些代码”的问题是 OP 通常会发布无法编译的代码 sn-ps,而 sn-p 通常不包含导致问题的代码。
  • hookDialog.setSize(450, 250); 应该是添加组件后的hookDialog.pack();

标签: java swing jdialog


【解决方案1】:

这将使对话框在屏幕上居中。

这样做:

    hookDialog.setLocationRelativeTo(null);

如果这不起作用:

    hookDialog.getContentPane().setLocationRelativeTo(null);

【讨论】:

    【解决方案2】:

    在您的系统上试用此代码。将您的逻辑添加到此基础中,看看它何时开始表现不佳。

    public static void main(final String[] args) throws Exception {
        SwingUtilities.invokeAndWait(new Runnable() {
            @Override
            public void run() {
                final JFrame frame = new JFrame();
                frame.setSize(300, 300);
                frame.setLocationRelativeTo(null);
                final JDialog hookDialog = new JDialog(frame, "Play Hook", true);
                hookDialog.setSize(100, 100);
                hookDialog.setLocationRelativeTo(null);
                hookDialog.setResizable(false);
                hookDialog.getContentPane().setLayout(null);
                final JButton btnPlayHook = new JButton("Play Hook");
                frame.getContentPane().add(btnPlayHook);
                btnPlayHook.addActionListener(new ActionListener() {
                    @Override
                    public void actionPerformed(final ActionEvent e) {
                        hookDialog.setVisible(true);
                    }
                });
                frame.setVisible(true);
            }
        });
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多