窗体需要分布三部分,左、中、右,而且随着窗体缩放的时候 ,中间部分保持不变,左、右同比例变化 ,于是使用了 GridBagLayout  GridBagLayout gbl_centerPanel = new GridBagLayout();
gbl_centerPanel.columnWidths = new int[]
{ 3, 1, 3 };
gbl_centerPanel.rowHeights = new int[]
{ 1 };
gbl_centerPanel.columnWeights = new double[]
{ 1.0, 0, 1.0 };
gbl_centerPanel.rowWeights = new double[]
{ 1.0 };
centerPanel.setLayout(gbl_centerPanel);窗体的设计界面如下:但是运行界面就不正确了 ,如下:而且,窗体缩放时,左、右两侧也不是同比例缩放。

解决方案 »

  1.   

    给你个TableLayout的例子,功能是你要求的,可以看出TableLayout很简单
    double[][] size = {
        {0.5, TableLayout.PREFERRED, 0.5},
        {TableLayout.FILL}
    };
    Container container = frame.getContentPane();
    container .setLayout(new TableLayout(size));
    container .add(new LeftPanel(), "0, 0");
    container .add(new CenterPanel(), "1, 0");
    container .add(new RightPanel(), "2, 0");
    到网上下载一个tablelayout.jar包就可以了
      

  2.   

    这个的确可以,谢谢,但是GridBagLayout也应该可以,为什么会不行呢 ?
      

  3.   

    import java.awt.*;import java.awt.event.*;import javax.swing.*;public class Calculator extends JFrame{
        private JTextField displayField;// 计算结果显示区    private String lastCommand;// 保存+,-,*,/,=命令    private double result;// 保存计算结果    private boolean start;// 判断是否为数字的开始    private Container container;
        private GridBagLayout layout;
        private GridBagConstraints constraints;
        public Calculator()
        {
            super("java_刘阳");
            container = getContentPane();
            layout = new GridBagLayout();
            container.setLayout(layout);
            constraints = new GridBagConstraints();        start = true;
            result = 0;
            lastCommand = "=";
            displayField = new JTextField(20);
            displayField.setHorizontalAlignment(JTextField.RIGHT);//注意这里
            constraints.gridx =0;
            constraints.gridy =0;
            constraints.gridwidth = 3; //在第几格显示
            constraints.gridheight = 1;
            constraints.fill = GridBagConstraints.BOTH;
            constraints.weightx = 100;  //调整比例
            constraints.weighty = 100;
            layout.setConstraints(displayField, constraints);
            container.add(displayField);        ActionListener insert = new InsertAction();
            ActionListener command = new CommandAction();        addButton("Backspace", 0, 1, 2, 1, insert);        addButton("CE", 2, 1, 1, 1, insert);        addButton("C", 3, 1, 1, 1, insert);        addButton("7", 0, 2, 1, 1, insert);        addButton("8", 1, 2, 1, 1, insert);        addButton("9", 2, 2, 1, 1, insert);        addButton("/", 3, 2, 1, 1, command);
    //
    //        addButton("4", 0, 3, 1, 1, insert);
    //
    //        addButton("5", 1, 3, 1, 1, insert);
    //
    //        addButton("6", 2, 3, 1, 1, insert);//        addButton("*", 3, 3, 1, 1, command);
    //
    //        addButton("1", 0, 4, 1, 1, insert);
    //
    //        addButton("2", 1, 4, 1, 1, insert);
    //
    //        addButton("3", 2, 4, 1, 1, insert);
    //
    //        addButton("-", 3, 4, 1, 1, command);
    //
    //        addButton("0", 0, 5, 1, 1, insert);
    //
    //        addButton("+/-", 1, 5, 1, 1, insert);// 只显示"-"号,"+"没有实用价值
    //
    //        addButton(".", 2, 5, 1, 1, insert);
    //
    //        addButton("+", 3, 5, 1, 1, command);
    //
    //        addButton("=", 0, 6, 4, 1, command);
            setSize(300, 300);        setVisible(true);    }    private void addButton(String label, int row, int column, int with,
                               int height, ActionListener listener)    {        JButton button = new JButton(label);        constraints.gridx = row;        constraints.gridy = column;        constraints.gridwidth = with;        constraints.gridheight = height;        constraints.fill = GridBagConstraints.BOTH;        button.addActionListener(listener);        layout.setConstraints(button, constraints);        container.add(button);    }    private class InsertAction implements ActionListener    {        public void actionPerformed(ActionEvent event)        {            String input = event.getActionCommand();            if (start)            {                displayField.setText("");                start = false;                if (input.equals("+/-"))                    displayField.setText(displayField.getText() + "-");            }            if (!input.equals("+/-"))            {                if (input.equals("Backspace"))                {                    String str = displayField.getText();                    if (str.length() > 0)                        displayField
                                    .setText(str.substring(0, str.length() - 1));                }                else if (input.equals("CE") || input.equals("C"))                {                    displayField.setText("0");                    start = true;                }                else                    displayField.setText(displayField.getText() + input);            }        }    }    private class CommandAction implements ActionListener    {        public void actionPerformed(ActionEvent evt)        {            String command = evt.getActionCommand();            if (start)            {                lastCommand = command;            }            else            {                calculate(Double.parseDouble(displayField.getText()));                lastCommand = command;                start = true;            }        }    }    public void calculate(double x)    {        if (lastCommand.equals("+"))
                result += x;        else if (lastCommand.equals("-"))
                result -= x;        else if (lastCommand.equals("*"))
                result *= x;        else if (lastCommand.equals("/"))
                result /= x;        else if (lastCommand.equals("="))
                result = x;        displayField.setText("" + result);    }    public static void main(String[] args)    {        Calculator calculator = new Calculator();        calculator.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);    }}楼主把上面的代码改改,就可以满足你的需求
      

  4.   

    给你个参考吧:
    import java.awt.*;
    import javax.swing.*;public class TestGridBagLayout extends JFrame {    public TestGridBagLayout() {
            GridBagLayout gbl = new GridBagLayout();
            this.setSize(800, 300);
            this.setLayout(gbl);
            this.setDefaultCloseOperation(EXIT_ON_CLOSE);        // Dfine GridBagConstraints
            GridBagConstraints gbc = new GridBagConstraints();
            gbc.fill = GridBagConstraints.BOTH;
            gbc.weighty = 1;
            
            // Left Panel
            gbc.weightx = 0.3; // 30%
            JPanel panLeft = new JPanel(new BorderLayout());
            panLeft.add(new JButton("panLeft"), BorderLayout.CENTER);
            gbl.setConstraints(panLeft, gbc);
            this.add(panLeft);        // Center Panel
            gbc.fill = GridBagConstraints.VERTICAL;
            gbc.weightx = 0; // Fixed
            JPanel panMid = new JPanel(new BorderLayout());
            panMid.setMinimumSize(new Dimension(100, 50));
            panMid.setPreferredSize(new Dimension(100, 50));
            panMid.add(new JButton("panMid"), BorderLayout.CENTER);
            gbl.setConstraints(panMid, gbc);
            this.add(panMid);        // Right Panel
            gbc.fill = GridBagConstraints.BOTH;
            gbc.weightx = 0.7; // 70%
            JPanel panRight = new JPanel(new BorderLayout());
            panRight.add(new JButton("panRight"), BorderLayout.CENTER);
            gbl.setConstraints(panRight, gbc);
            this.add(panRight);
        }    public static void main(String[] args) {
            TestGridBagLayout wnd = new TestGridBagLayout();
            wnd.setVisible(true);
        }}
      

  5.   

    用GridBagConstraints作为约束来添加控件,可以达到要求的