JAVA设置JFrame的最大大小

时间:2016-11-13 19:29:52

标签: java swing jframe layout-manager

我正在开发一个关于JAVA Swing的项目。我在JAVA方面没有太多经验,我需要你们的帮助。
我使用frame.pack()因此需要获得最佳大小。我的screenTwo可以根据ScreenOne的输入进行更改。我使用了frame.setMaximumSize(new Dimension(1300, 500)),但似乎无法正常工作。
如果框架变大,它与任务栏重叠,我不想要,所以它应该比屏幕总大小小一点。怎么做到这一点?
修改
代码:

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


    }
}

1 个答案:

答案 0 :(得分:4)

首先,您发布的所有代码是什么?您的问题是关于框架的首选大小和最大大小。框架的布局与问题无关。

我们对您的申请不感兴趣。我们只对展示问题的代码感兴趣。

例如:

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

现在您将上面的代码放在main()方法中,并且您有代码来演示您的问题。这是您在论坛中发布的内容,而不是您的应用程序的核心转储。

  

如果框架变大,它会与任务栏重叠,我不希望这样,

关于您的问题,您可以使用以下代码获取桌面上的可用空间:

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

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