如何调整swing应用程序的大小,使JFrame的边界始终触及任务栏?

时间:2013-12-31 21:54:18

标签: java swing jframe

我正在尝试阻止我的应用调整大小并完成以下操作(基于stackoverflow的宝贵建议):

 MyFrame frame = new MyFrame("LabelTest");
 frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
 frame.setVisible(true);
 frame.setResizable(false);
 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

这很好用......但是一旦我点击标题栏,应用程序就会变为:enter image description here 并且不再可调整大小。

如何在标题栏上禁用操作?

我完成了以下操作以扩展我的应用程序:

class SwingApplication
  {
    public static void main(String args[])
    {
        MyFrame frame = new MyFrame("LabelTest");

        final Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
        frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
        frame.setSize(screenSize);
        frame.setVisible(true);    // FIRST visible = true
        frame.setResizable(false); // THEN  resizable = false
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    }
}

输出1:

enter image description here

但是,一旦我最小化并恢复应用程序,它就会占用整个屏幕。任何修复使应用程序显示为输出1

我最小化并恢复后,输出2

enter image description here

2 个答案:

答案 0 :(得分:0)

试试这个:

JFrame frame = new JFrame();
frame.setSize(Toolkit.getDefaultToolkit().getScreenSize());
frame.setAlwaysOnTop(true);
frame.setResizable(false);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

答案 1 :(得分:0)

不确定这是否是避免这种情况的正确方法,这里是一个简单的黑客,以保持屏幕大小足够大,以避免被工具栏隐藏。我只是将高度设置为略小于屏幕尺寸。不确定它是否正是您正在寻找的,但您可以尝试一下。

import java.awt.Dimension;
import java.awt.Toolkit;
import javax.swing.JFrame;

class SwingApplication {
    public static void main(String args[]) {
        JFrame frame = new JFrame("LabelTest");

        final Dimension screenSize = Toolkit.getDefaultToolkit()
                .getScreenSize();

        int width = (int)screenSize.getWidth();
        int height = (int)screenSize.getHeight();
        Dimension newDim = new Dimension(width, height - 40);

        frame.setSize(newDim);

        frame.setVisible(true); // FIRST visible = true
        frame.setResizable(false); // THEN resizable = false
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}