What layout accepts percentages instead of values in swing?

前端 未结 2 1736
南方客
南方客 2020-12-10 08:35

I need to create frame content based on their percentage of visual space they need. For example 20% for panel1,80% for panel2. what layout does this kind of layout managemen

相关标签:
2条回答
  • 2020-12-10 09:04
    • in reduced form GridBagLayout, but with success for your requirement 80% - 20%

    .

    import java.awt.*;
    import javax.swing.*;
    import javax.swing.border.*;
    
    public class BorderPanels extends JFrame {
    
        private static final long serialVersionUID = 1L;
    
        public BorderPanels() {
            setLayout(new GridBagLayout());// set LayoutManager
            GridBagConstraints gbc = new GridBagConstraints();
            JPanel panel1 = new JPanel();
            Border eBorder = BorderFactory.createEtchedBorder();
    
            panel1.setBorder(BorderFactory.createTitledBorder(eBorder, "80pct"));
            gbc.gridx = gbc.gridy = 0;
            gbc.gridwidth = gbc.gridheight = 1;
            gbc.fill = GridBagConstraints.BOTH;
            gbc.anchor = GridBagConstraints.NORTHWEST;
            gbc.weightx = gbc.weighty = 70;
            add(panel1, gbc); // add component to the ContentPane
    
            JPanel panel2 = new JPanel();
            panel2.setBorder(BorderFactory.createTitledBorder(eBorder, "20pct"));
            gbc.gridy = 1;
            gbc.weightx = gbc.weighty = 20;
            gbc.insets = new Insets(2, 2, 2, 2);
            add(panel2, gbc); // add component to the ContentPane
    
            JPanel panel3 = new JPanel();
            panel3.setBorder(BorderFactory.createTitledBorder(eBorder, "20pct"));
            gbc.gridx = 1;
            gbc.gridy = 0;
            gbc.gridwidth = 1;
            gbc.gridheight = 2;
            gbc.weightx = /*gbc.weighty = */ 20;
            gbc.insets = new Insets(2, 2, 2, 2);
            add(panel3, gbc); // add component to the ContentPane
    
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // important
            pack();
            setVisible(true); // important
        }
    
        public static void main(String[] args) {
            javax.swing.SwingUtilities.invokeLater(new Runnable() { // important
    
                @Override
                public void run() {
                    BorderPanels borderPanels = new BorderPanels();
                }
            });
        }
    }
    

    • custom MigLayout
    0 讨论(0)
  • 2020-12-10 09:16

    None of the JDK layouts allow you to do this directly. The BoxLayout and GridBagLayout sort of allow you do this.

    With GridBagLayout you can specify a weightx/y value between 0 and 1 which tells the layout manager how to allocate extra space. So assuming that you create the components with a preferred size in a ratio of 80/20 they should be able to grow in the same ratio.

    A BoxLayout is easier to use in this regard because you don't need to specify a specific constraint it just resizes in the ratio of preferred sizes.

    For a simple layout manager that was designed to allow you to specify relative sizes as a simple constraint you can check out Relative Layout.

    0 讨论(0)
提交回复
热议问题