首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

Swing GridBagLayout 布局的有关问题

2012-11-09 
Swing GridBagLayout 布局的问题窗体需要分布三部分,左、中、右,而且随着窗体缩放的时候 ,中间部分保持不变,

Swing GridBagLayout 布局的问题
窗体需要分布三部分,左、中、右,而且随着窗体缩放的时候 ,中间部分保持不变,左、右同比例变化 ,于是使用了 GridBagLayout 

Java code
    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);

窗体的设计界面如下:

但是运行界面就不正确了 ,如下:

而且,窗体缩放时,左、右两侧也不是同比例缩放。

[解决办法]
给你个TableLayout的例子,功能是你要求的,可以看出TableLayout很简单
Java code
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");
[解决办法]
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);

}



}

楼主把上面的代码改改,就可以满足你的需求
[解决办法]
给你个参考吧:

Java code
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);    }} 


[解决办法]
用GridBagConstraints作为约束来添加控件,可以达到要求的

热点排行
Bad Request.