布局中应用布局,这样才能有好的效果。
先将一个界面分成几个部份,不能太多,最多4~5个。每个部件份都加入JPanel.
对JPanel再用一次布局,加入你的控件,就可以得到非常复杂,但又美观的布局。

解决方案 »

  1.   

    你对于GridBagConstraints中的参数weightX应用的不够,它分配属于空间的比例.看看帮助吧.
    如果决定复杂,建议使用Box,这个东西好用.
      

  2.   

    我的布局关键是两个按钮只有1/2个TEXTFIELD的高,这个BOX能实现吗
      

  3.   

    如果希望按钮达到文本框的半高,需要重载按钮以下方法:
    public Dimension getMaximumSize()
     public Dimension getMinimumSize() 
    public Dimension getPreferredSize()
    以下代码组件尺寸不够准确,可以给你一个大概的思路 
    package untitled6;import java.awt.*;
    import javax.swing.*;/**
     * <p>Title: </p>
     * <p>Description: </p>
     * <p>Copyright: Copyright (c) 2003</p>
     * <p>Company: </p>
     * @author not attributable
     * @version 1.0
     */public class Dialog1
        extends JDialog {
      JPanel panel1 = new JPanel();
      BorderLayout borderLayout1 = new BorderLayout();
      JPanel jPanel1 = new JPanel();
      GridBagLayout gridBagLayout1 = new GridBagLayout();
      JTextField jTextField1 = new JTextField();
      JTextField jTextField2 = new JTextField();
      JButton jButton1 = new MyButton();
      JButton jButton2 = new MyButton();
      JButton jButton3 = new MyButton();
      JButton jButton4 = new MyButton();  public Dialog1(Frame frame, String title, boolean modal) {
        super(frame, title, modal);
        try {
          jbInit();
          pack();
        }
        catch (Exception ex) {
          ex.printStackTrace();
        }
      }  public Dialog1() {
        this(null, "", false);
      }  private void jbInit() throws Exception {
        panel1.setLayout(borderLayout1);
        jPanel1.setLayout(gridBagLayout1);
        jTextField1.setText("jTextField1");
        jTextField2.setText("jTextField2");
        jButton1.setText("jButton1");
        jButton2.setText("jButton2");
        jButton3.setText("jButton3");
        jButton4.setText("jButton4");
        getContentPane().add(panel1);
        panel1.add(jPanel1, BorderLayout.CENTER);
        jPanel1.add(jTextField1, new GridBagConstraints(0, 0, 1, 2, 0.0, 0.0
            , GridBagConstraints.CENTER, GridBagConstraints.NONE,
            new Insets(0, 0, 0, 0), 0, 0));
        jPanel1.add(jTextField2,  new GridBagConstraints(2, 0, 1, 2, 0.0, 0.0
                ,GridBagConstraints.EAST, GridBagConstraints.NONE, new Insets(0, 100, 0, 0), 0, 0));
        jPanel1.add(jButton1, new GridBagConstraints(1, 0, 1, 1, 0.0, 0.0
                                                     , GridBagConstraints.CENTER,
                                                     GridBagConstraints.NONE,
                                                     new Insets(0, 0, 0, 0), 0, 0));
        jPanel1.add(jButton2, new GridBagConstraints(1, 1, 1, 1, 0.0, 0.0
                                                     , GridBagConstraints.CENTER,
                                                     GridBagConstraints.NONE,
                                                     new Insets(0, 0, 0, 0), 0, 0));
        jPanel1.add(jButton3, new GridBagConstraints(3, 0, 1, 1, 0.0, 0.0
                                                     , GridBagConstraints.CENTER,
                                                     GridBagConstraints.NONE,
                                                     new Insets(0, 0, 0, 0), 0, 0));
        jPanel1.add(jButton4, new GridBagConstraints(3, 1, 1, 1, 0.0, 0.0
                                                     , GridBagConstraints.CENTER,
                                                     GridBagConstraints.NONE,
                                                     new Insets(0, 0, 0, 0), 0, 0));
      }  private class MyButton
          extends JButton {       public Dimension getMaximumSize() {
          return getPreferredSize();
        }    public Dimension getMinimumSize() {
          return getPreferredSize();
        }    public Dimension getPreferredSize() {
          Dimension dim = super.getPreferredSize();
          dim.height /= 2;
          dim.width /= 2;
          return dim;
        }  }
      public static void main(String[] args) {
        Dialog1 dia = new Dialog1();
        dia.setSize(400,300);
        dia.setVisible( true);
            
      }
    }建议:JButton 中有方法setIcon,只需要添加一个ICON,无需重载按钮的绘制.