Using Java pack() method

后端 未结 3 1264
误落风尘
误落风尘 2020-12-17 07:29

I can\'t make the pack() method work. I tried several things. My code looks like this at the moment:

Class 1:

public static void main( String[] args          


        
3条回答
  •  -上瘾入骨i
    2020-12-17 08:14

    If you want your JFrame to work with a null layout, rearrange your code so that it looks like this:

    public class JavaGui extends javax.swing.JFrame 
    {
    public JavaGui()
    {
        setMinimumSize(1154, 753); // Make sure you do setMinimumSize() instead of setSize() when using pack() so that the JFrame does not shrink to 0 size
        setLayout(null);
        add(panelLeft);
        add(panelRight);
        pack();
    }
    // Next is main method
    

    Main:

    public static void main(String[] args)
    {
    java.awt.EventQueue.invokeLater(new Runnable() {
        public void run()
        {
            new JavaGui().setVisible(true);
            // Do not do any formatting for your JFrame here
        }
    });
    

    Before, you were modifying the JFrame after it was set visible, so that usually does not work, except for pack(). All components and settings for your JFrame should not be in the main method if you are using an anonymous inner class.

    You can also use other layouts. Null layouts are for getting pixels in precise locations, which is used for advanced GUI design such as creating a custom GUI, but it seems that you are making a generic GUI with JPanels. For this, I would recommend using a GridBagLayout, which keeps everything centered if the frame is resized and is easy to use. To use a GridBagLayout, you have to replace setLayout(null); with setLayout(new GridBagLayout()); and set GridBagConstraints. Here is some example code of making a panel with a component and a GridBagLayout:

    JPanel pane = new JPanel(new GridBagLayout());
    GridBagConstraints c = new GridBagConstraints();
    if (shouldFill) {
                //natural height, maximum width
                c.fill = GridBagConstraints.HORIZONTAL;
    }
    //For each component to be added to this container:
    //...Create the component...
    //...Set instance variables in the GridBagConstraints instance...
    pane.add(theComponent, c);
    // Source: Oracle Docs
    

提交回复
热议问题