Using Java pack() method

后端 未结 3 1265
误落风尘
误落风尘 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条回答
  •  再見小時候
    2020-12-17 07:57

    I would recommened beginners on building up swing guis to use a good ide with a builtin gui designer like eclipse and windowbuilder or netbeans with matisse. It will help you building up a prototype of your desired gui and gives you an insight how the layouting is done in the source code. Experiment with the differenet layouts and what is happening when some values are changed.

    one does not simply build up a well behaving gui without understanding how the layout works, so doing the recommended tutorials and looking at examples as already posted by Hovercraft Full Of Eels is absolutely necessary.

    For your case i just guess what you were up to. Because youre mentioning left and right panels i suggest a JSplitPane which let you divide your screen in two areas which are customizable in size and orientation.

    import java.awt.BorderLayout;
    import java.awt.Dimension;
    import java.awt.EventQueue;
    
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JSplitPane;
    
    public class JavaGui extends JFrame {
    
        //SerialVersionId http://stackoverflow.com/questions/285793/what-is-a-serialversionuid-and-why-should-i-use-it
        private static final long   serialVersionUID    = 1L;
    
        public static void main(String[] args) {
            //Calls to Gui Code must happen on the event dispatch thread that the gui does not get stuck
            EventQueue.invokeLater(new Runnable() {
                @Override
                public void run() {
                    new JavaGui().setVisible(true);
                }
            });
        }       
    
        public JavaGui() {
            // Set the desired size of the frame to determine the maximum size of its components
            setPreferredSize(new Dimension(1024, 768));
    
            // Set the default close operation, if press x on frame, destroy the frame and exit the application - others are just destroy the frame or just hide the
            // frame
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
            // BorderLayout because we just need a centric gui with one component, here JSplitPane in full size
            getContentPane().setLayout(new BorderLayout(0, 0));
    
            // JsplitPane is a bit special as it depends on the divider location between both panels, for the sake of a small example we take the default -1,
            JSplitPane splitPane = new JSplitPane();
            // 0.5 divides extra space equally to left and right component when resizing the frame - so specifiying a size for the left and right component is not
            // necessary
            // use the divider location default -1 to let the width of the left component decide where the right component begins, in that case because of the
            // resize weight half and half
            splitPane.setDividerLocation(-1);
            splitPane.setResizeWeight(0.5);
            getContentPane().add(splitPane, BorderLayout.CENTER);
    
            // For the panels the same layout as default as the intention is not stated in your question
            JPanel leftPanel = new JPanel();
            splitPane.setLeftComponent(leftPanel);
            leftPanel.setLayout(new BorderLayout(0, 0));
    
            JPanel rightPanel = new JPanel();
            splitPane.setRightComponent(rightPanel);
            rightPanel.setLayout(new BorderLayout(0, 0));
    
            // Add a button Panel to the south for doing something - flow layout for letting the components flow to the right side
            JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT));
            getContentPane().add(buttonPanel, BorderLayout.SOUTH);
    
            // Close Button for closing the frame
            JButton btnExit = new JButton("Destroy this frame, but let application run");
            btnExit.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    dispose();
                }
            });
            buttonPanel.add(btnExit);
    
            // Set every component to its preferred size
            pack();
    
            // Make it visible
            setVisible(true);
        }
    }
    

提交回复
热议问题