简体   繁体   中英

JAVA Set Maximum Size of JFrame

I'm working on a project on JAVA Swing. I don't have much experience in JAVA, and I need some help from you guys.
I'm using frame.pack() so it takes the optimal size as required. My screenTwo can change depending on the input from ScreenOne . I've used frame.setMaximumSize(new Dimension(1300, 500)) but it doesn't seem to be working.
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. 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:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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