窗体需要分布三部分,左、中、右,而且随着窗体缩放的时候 ,中间部分保持不变,左、右同比例变化 ,于是使用了 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);窗体的设计界面如下:但是运行界面就不正确了 ,如下:而且,窗体缩放时,左、右两侧也不是同比例缩放。
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);窗体的设计界面如下:但是运行界面就不正确了 ,如下:而且,窗体缩放时,左、右两侧也不是同比例缩放。
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包就可以了
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); }}楼主把上面的代码改改,就可以满足你的需求
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);
}}