Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JDialog每次打开时都会向上移动_Java_Swing_Jdialog - Fatal编程技术网

Java JDialog每次打开时都会向上移动

Java JDialog每次打开时都会向上移动,java,swing,jdialog,Java,Swing,Jdialog,我有一个JDialog,在JFrame中单击按钮即可打开它。每次我关闭JDialog并再次单击并打开JDialog时,它都会在屏幕上向上移动大约30像素。我尝试修复帧位置,使用setLocationRelativeTonull,还尝试使用Toolkit.getDefaultToolkit.getScreenSize修复它;但它不起作用。它只是向上移动,直到它位于屏幕顶部。为什么会这样 // Play Hook Frame hookDialog = new JDialog(fram

我有一个JDialog,在JFrame中单击按钮即可打开它。每次我关闭JDialog并再次单击并打开JDialog时,它都会在屏幕上向上移动大约30像素。我尝试修复帧位置,使用setLocationRelativeTonull,还尝试使用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);
            }
        }
    });
这将使对话框在屏幕上居中

这样做:

    hookDialog.setLocationRelativeTo(null);
如果这不起作用:

    hookDialog.getContentPane().setLocationRelativeTo(null);

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

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);
        }
    });
}

不看代码就不可能知道。为了更快地获得更好的帮助,发布一个最小的完整的可验证示例。@Java42我已添加了相关部分。@Java42请求“某些代码”的问题是OP通常发布不可编译的代码段,而代码段通常不包含导致该问题的代码。hookDialog.setSize450,250;应该是hookDialog.pack;添加组件后。