简体   繁体   English

JAVA设置JFrame的最大大小

[英]JAVA Set Maximum Size of JFrame

I'm working on a project on JAVA Swing. 我正在JAVA Swing上的一个项目上。 I don't have much experience in JAVA, and I need some help from you guys. 我在JAVA方面没有太多经验,我需要你们的一些帮助。
I'm using frame.pack() so it takes the optimal size as required. 我正在使用frame.pack()因此它会根据需要采用最佳大小。 My screenTwo can change depending on the input from ScreenOne . 我的screenTwo可以根据ScreenOne的输入进行ScreenOne I've used frame.setMaximumSize(new Dimension(1300, 500)) but it doesn't seem to be working. 我使用了frame.setMaximumSize(new Dimension(1300, 500))但是它似乎没有用。
If the frame gets bigger, it overlaps with the Taskbar, and I don't want that, so it should be a bit smaller than the total Screen size. 如果框架变大,它将与任务栏重叠,我不希望这样,因此它应该比屏幕的总尺寸小一点。 How to achieve this? 如何实现呢?
EDIT: 编辑:
Code: 码:

public class Test {

    private static JFrame frame ;
    private JRadioButton[] radioButton;
    public static void main(String[] args) {
        Test t = new Test();
        t.go();
        frame.pack();
        frame.setMaximumSize(new Dimension(1300, 600));
        frame.setResizable(false);
        frame.setVisible(true);
        Dimension si = frame.getContentPane().getSize();
        System.out.println(si);         //Output: java.awt.Dimension[width=934,height=751]
    }
    public void go()
    {
        frame = new JFrame();
        JPanel panel1 = new JPanel();
        frame.getContentPane().add(panel1);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        panel1.setLayout(new BorderLayout(0, 20));
        Font font =  new Font("Times New Roman", Font.PLAIN, 20);

        JPanel panel2 = new JPanel();
        panel2.setLayout(new FlowLayout(FlowLayout.CENTER, 50, 1));
        panel2.add(new JLabel("                         Flight ID"));
        panel2.add(new JLabel("                              Departure"));
        panel2.add(new JLabel("             Arrival      "));
        panel2.add(new JLabel("      Transit Time    "));
        panel2.add(new JLabel("Total Duration                       "));        
        panel1.add(BorderLayout.NORTH, panel2);

        JPanel panel3 = new JPanel();
        panel3.setLayout(new GridLayout(0, 1));        

        GridBagConstraints c = new GridBagConstraints();
        int comboSize = 15, i;
        JPanel panelCombo[] = new JPanel[comboSize];
        ButtonGroup group = new ButtonGroup();
        radioButton = new JRadioButton[comboSize];
        /***
        Adding a bunch of components in here
        ***/
        for(i=0; i<comboSize; i++) {
                panelCombo[i] = new JPanel();
                panelCombo[i].setLayout(new GridBagLayout());
                c.gridx = 0;            
                c.gridy = 0;
                c.insets = new Insets(0, 50, 0, 50);            
                panelCombo[i].add(new JLabel("Flight 1 ID"), c);

                c.gridx++;
                panelCombo[i].add(new JLabel("Dept Time"), c);

                c.gridx++;
                panelCombo[i].add(new JLabel("Arr Time"), c);
                c.gridx++;
                c.gridheight = 4;
                panelCombo[i].add(new JLabel("Total time"), c);
                c.gridx++;

                panelCombo[i].add(new JLabel("Duration"), c);

                c.gridx++;         
                radioButton[i] = new JRadioButton();
                panelCombo[i].add(radioButton[i], c);
                group.add(radioButton[i]);

                c.gridheight = 1;
                c.gridx = 0;
                c.gridy++;
                panelCombo[i].add(new JLabel("Depar to Arrival"), c);

                c.gridx++;
                panelCombo[i].add(new JLabel("Date"), c);

                c.gridx = 0;
                c.gridy++;
                panelCombo[i].add(new JLabel("Flight 2 ID"), c);

                c.gridx++;
                panelCombo[i].add(new JLabel("Dept Time"), c);

                c.gridx++;
                panelCombo[i].add(new JLabel("Arr Time"), c);

                c.gridx = 0;
                c.gridy++;
                panelCombo[i].add(new JLabel("Dept to Arrival"), c);

                c.gridx++;
                panelCombo[i].add(new JLabel("Date"), c);
                panelCombo[i].setBackground(Color.GREEN);

                panel3.add(panelCombo[i]);
                panelCombo[i].setBorder(BorderFactory.createLineBorder(Color.BLACK));
        }            
        JScrollPane scroll = new JScrollPane(panel3);
        scroll.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED);
        scroll.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
        panel1.add(BorderLayout.CENTER, scroll);


    }
}

First of all, what's with all the code you posted?. 首先,您发布的所有代码是什么? Your question is about the preferred and maximum size of a frame. 您的问题是关于框架的首选和最大尺寸。 The layout of the frame is irrelevant to the question. 框架的布局与问题无关。

We are not interested in your application. 我们对您的申请不感兴趣。 We are only interested in code that demonstrates the problem. 我们只对演示问题的代码感兴趣。

For example: 例如:

JPanel panel = new JPanel();
panel.setPreferredSize( new Dimension(1400, 600) );

JFrame frame = new JFrame();
frame.add( panel );
frame.pack();
frame.setMaximumSize( new Dimension(1300, 500) );
frame.setVisible( true );

Now you put the above code in a main() method and you have code that demonstrates your problem. 现在,将以上代码放入main()方法中,并且您有演示您问题的代码。 THAT is what you post in the forum, not a core dump of your application. 那是您在论坛上发布的内容,而不是应用程序的核心转储。

If the frame gets bigger, it overlaps with the Taskbar, and I don't want that, 如果框架变大,它将与任务栏重叠,而我不希望这样,

Regarding your issue you can use the following code to get the space available on the desktop: 关于您的问题,您可以使用以下代码来获取桌面上的可用空间:

GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment();
Rectangle bounds = env.getMaximumWindowBounds();
System.out.println("Screen Bounds: " + bounds );

Add the above code after the pack() and then add something like the following: 在pack()之后添加上面的代码,然后添加如下内容:

int width = Math.min(frame.getWidth(), bounds.width);
int height = Math.min(frame.getHeight(), bounds.height);
frame.setSize( new Dimension(width, height) );
frame.setVisible(true);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM