我需要在Java中进行以下布局:

但是,我应该发现没有布局管理器可以为我简单地解决此问题。我需要在JFrame中使用此布局。

有没有中途我可以做到的简单方法?

提前致谢!

编辑:谢谢大家,我终于成功了!

这就是我所做的(如您所建议的)

窗口的

  • BorderLayout
  • leftPanel,GridLayout(1,1)/ *拉伸* /,在
  • 窗口中添加组件1,WEST
  • right窗口
  • 中的面板,BorderLayout,CENTER
  • rightTop(作为CENTER添加到rightPanel中)面板中,添加组件2
  • rightBottom(作为SOUTH添加到rightPanel中)面板,GridLayout(1,1)(也用于拉伸),添加组件3

  • 谢谢大家,我的意见参差不齐^^

    最佳答案

    我知道您通过在JPanels布局管理器中混合使用BorderLayout解决了您的问题。如果可行,那很好。

    对于那些对使用GridBagLayout作为解决方案感到好奇的人,我以此类为例。只需复制粘贴,编译和运行即可。拖动此小应用程序窗口的角,以查看调整窗口大小的效果。

    // Example code showing the flexibility of GridBagLayout.
    
    // Source code generated by WindowBuilder 1.0.0r37 in Eclipse (Indigo Release) on Mac OS X 10.6.7.
    
    // © 2011 Basil Bourque.   http://www.GridsGoneWild.com/
    // This source code may be used freely forever by anyone taking full responsibility for doing so.
    
    // Each layout manager bundled in Java is quite different from the others. They all have strengths and weaknesses,
    // each designed for different purposes and effects.
    
    // GridBagLayout is the most powerful and flexible, but takes some patient practice to understand.
    // Funny animated video commentary by a GridBagLayout programmer: http://madbean.com/anim/totallygridbag/
    // Hand-coding GridBagLayout is certainly tedious, and nearly impossible for complex forms. So I recommend the use of
    // a visual GUI builder such as WindowBuilder in Eclipse, JFormDesigner from FormDev.com, or Matisse in NetBeans.
    
    // Key ideas, "grow" & "fill":
    // • In WindowBuilder's Design View, select a widget, then use the "Horizontal grow" and "Vertical grow" icons found in the upper right tool bar.
    // • Use the widget's (label's, button's) "Constraints" > "fill" property in the property sheet of WindowBuilder.
    
    // Further ideas:
    // • To contain multiple widgets in each area, use JPanel objects where I have used single JLabel and JButton objects.
    //   Nesting JPanels inside JPanels (or in the JFrame's contentPane) is considered normal in Swing. Each JPanel has its own layout manager.
    // • If need be, you can set the Minimum, Maximum, and/or Preferred size of a widget or JPanel.
    // • If you want certain widgets or JPanels to get disproportionately more or less of the space gained or lost when a window is resized,
    //   use "weightx" and "weighty" properties.
    
    // WindowBuilder Tips:
    // • If it's your first time: Open the .java file, then click the "Design" button at bottom to see visual editor.
    // • Click the "Show Advanced properties" icon at top of a widget's property sheet to see many hidden properties.
    
    // package com.your.package.goes.here;  // Uncomment this line, and modify to suit your own package.
    
    import java.awt.EventQueue;
    
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.border.EmptyBorder;
    import java.awt.GridBagLayout;
    import javax.swing.JLabel;
    import java.awt.GridBagConstraints;
    import java.awt.Color;
    import java.awt.Insets;
    import javax.swing.JButton;
    import java.awt.event.ActionListener;
    import java.awt.event.ActionEvent;
    
    public class GridBagLayout_Example extends JFrame {
        private JPanel contentPane;
        private JLabel lblVariableXVariableY;
        private JButton btnVariableXFixedY;
        private JLabel lblFixedXVariableY;
    
        /**
         * Launch the application.
         */
        public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
            try {
                GridBagLayout_Example frame = new GridBagLayout_Example();
                frame.setVisible(true);
            } catch (Exception e) {
                e.printStackTrace();
            }
            }
        });
        }
    
        /**
         * Constructor
         */
        public GridBagLayout_Example() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 450, 300);
        this.contentPane = new JPanel();
        this.contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(this.contentPane);
        GridBagLayout gbl_contentPane = new GridBagLayout();
        gbl_contentPane.columnWidths = new int[]{0, 0, 0};
        gbl_contentPane.rowHeights = new int[]{0, 0, 0};
        gbl_contentPane.columnWeights = new double[]{0.0, 1.0, Double.MIN_VALUE};
        gbl_contentPane.rowWeights = new double[]{1.0, 0.0, Double.MIN_VALUE};
        this.contentPane.setLayout(gbl_contentPane);
    
        this.lblFixedXVariableY = new JLabel("Fixed x, Variable y");
        this.lblFixedXVariableY.setOpaque(true);
        this.lblFixedXVariableY.setBackground(new Color(233, 150, 122));
        GridBagConstraints gbc_lblFixedXVariableY = new GridBagConstraints();
        gbc_lblFixedXVariableY.fill = GridBagConstraints.VERTICAL;
        gbc_lblFixedXVariableY.gridheight = 2;
        gbc_lblFixedXVariableY.insets = new Insets(0, 0, 5, 5);
        gbc_lblFixedXVariableY.gridx = 0;
        gbc_lblFixedXVariableY.gridy = 0;
        this.contentPane.add(this.lblFixedXVariableY, gbc_lblFixedXVariableY);
    
        this.lblVariableXVariableY = new JLabel("Variable x & y");
        this.lblVariableXVariableY.setBackground(new Color(147, 112, 219));
        this.lblVariableXVariableY.setOpaque(true);
        GridBagConstraints gbc_lblVariableXVariableY = new GridBagConstraints();
        gbc_lblVariableXVariableY.fill = GridBagConstraints.BOTH;
        gbc_lblVariableXVariableY.insets = new Insets(0, 0, 5, 0);
        gbc_lblVariableXVariableY.gridx = 1;
        gbc_lblVariableXVariableY.gridy = 0;
        this.contentPane.add(this.lblVariableXVariableY, gbc_lblVariableXVariableY);
    
        this.btnVariableXFixedY = new JButton("Variable x, Fixed y");
        this.btnVariableXFixedY.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
            }
        });
        this.btnVariableXFixedY.setOpaque(true);
        GridBagConstraints gbc_btnVariableXFixedY = new GridBagConstraints();
        gbc_btnVariableXFixedY.fill = GridBagConstraints.HORIZONTAL;
        gbc_btnVariableXFixedY.gridx = 1;
        gbc_btnVariableXFixedY.gridy = 1;
        this.contentPane.add(this.btnVariableXFixedY, gbc_btnVariableXFixedY);
        }
    
    }
    

    10-07 12:17
    查看更多