jframe布局的问题
我有10来个按扭要放在jfame上
如
button1 button2 button3
button4 button5 空 button6
button7 button8 空 button9 空 button10
这样的格局摆放
不知道jframe的布局怎么设置,
请指教,不甚感激!
[解决办法]
要么用gridlayout来要么用null布局然后设置坐标要么就用grouplayout来进行自由布局
[解决办法]
用null布局然后设置坐标要用哪个方法
[解决办法]
对你说的问题也不是很明白,我这有两个计算器的例子,一个是应用gridlayout,另一个是应用gridbaglayout的,希望能对你有所帮助,以下是程序代码:
import java.awt.*;
import java.awt.event.*;
public class Calculator2 extends WindowAdapter implements ActionListener {
private int result = 0, data1 = 0, radixPointDepth = 1;
private boolean radixPointIndicate = false;
private boolean resultIndicate = false; //是否显示
private char prec = '+';
private Frame f;
private TextField tf;
private Button b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14,
b15, b16;
Panel p;
static public void main(String args[]) {
new Calculator2().go();
}
public void go() {
f = new Frame("计算器_刘阳");
p = new Panel();
p.setLayout(new GridLayout(4, 4));
tf = new TextField(30);
b1 = new Button("7");
b2 = new Button("8");
b3 = new Button("9");
b4 = new Button("+");
b5 = new Button("4");
b6 = new Button("5");
b7 = new Button("6");
b8 = new Button("-");
b9 = new Button("1");
b10 = new Button("2");
b11 = new Button("3");
b12 = new Button("*");
b13 = new Button("0");
b14 = new Button(".");
b15 = new Button("=");
b16 = new Button("/");
f.add(tf, "North");
f.add(p, "Center");
p.add(b1);
p.add(b2);
p.add(b3);
p.add(b4);
p.add(b5);
p.add(b6);
p.add(b7);
p.add(b8);
p.add(b9);
p.add(b10);
p.add(b11);
p.add(b12);
p.add(b13);
p.add(b14);
p.add(b15);
p.add(b16);
b1.addActionListener(this);
b2.addActionListener(this);
b3.addActionListener(this);
b4.addActionListener(this);
b5.addActionListener(this);
b6.addActionListener(this);
b7.addActionListener(this);
b8.addActionListener(this);
b9.addActionListener(this);
b10.addActionListener(this);
b11.addActionListener(this);
b12.addActionListener(this);
b13.addActionListener(this);
b14.addActionListener(this);
b15.addActionListener(this);
b16.addActionListener(this);
f.addWindowListener(this);
f.setSize(200, 200);
f.setVisible(true);
//f.pack();
}
public void actionPerformed(ActionEvent e) {
String s;
s = e.getActionCommand();
switch (s.charAt(0)) {
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
if (resultIndicate) {
result = 0;
data1 = 0;
prec = '+';
}
Integer Int1 = new Integer(s);
if (radixPointIndicate) {
radixPointDepth = radixPointDepth / 10;
data1 = data1 + (Int1.intValue()) * radixPointDepth;
} else {
data1 = data1 * 10 + (Int1.intValue());
}
Double displayNumber = new Double(data1);
tf.setText(displayNumber.toString());
resultIndicate = false;
break;
case '+':
case '-':
case '*':
case '/':
case '=':
if (s.charAt(0) != '=' && resultIndicate) {
prec = s.charAt(0);
resultIndicate = false;
} else {
switch (prec) {
case '+':
result = result + data1;
break;
case '-':
result = result - data1;
break;
case '*':
result = result * data1;
break;
case '/':
result = result / data1;
break;
}
}
radixPointIndicate = false;
radixPointDepth = 1;
displayNumber = new Double(result);
tf.setText(displayNumber.toString());
if (s.charAt(0) != '=') {
data1 = 0;
prec = s.charAt(0);
} else {
resultIndicate = true;
}
break;
case '_':
radixPointIndicate = true;
break;
}
}
public void windowClosing(WindowEvent e) {
System.exit(0);
}
}
*********************************************************
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Calculator extends JFrame
{
private Container container;
private GridBagLayout layout;
private GridBagConstraints constraints;
private JTextField displayField;// 计算结果显示区
private String lastCommand;// 保存+,-,*,/,=命令
private double result;// 保存计算结果
private boolean start;// 判断是否为数字的开始
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 = 4;
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);
}
}
[解决办法]
因为GridLayout是按坐标一个个排下去的。比如说JPanel jp6 = new JPanel(new GridLayout(3, 2));
JButton jb=new JButton("button1");
遇到空的时候可以写jp6.add(new JLabel());
不为空的就可以用jp6.add(jb);这里是3行两列,所以add6次就可以了,如果像楼主那样的话,需要3行六列。
[解决办法]
你看看下面这个
import java.awt.*;import java.awt.event.*;import javax.swing.*;public class BoxLayoutDemo{ public BoxLayoutDemo(){ JFrame f=new JFrame(); Container contentPane=f.getContentPane(); Box baseBox=Box.createHorizontalBox();//先产生水平排列方式的Box组件,当作基底容器(BaseBox) contentPane.add(baseBox); /*产生垂直排列方式的Box组件来安置第一与第三个按钮 */ Box vBox=Box.createVerticalBox(); JButton b=new JButton("first"); vBox.add(b); b=new JButton("third"); b.setMaximumSize(new Dimension(100,150)); vBox.add(b); baseBox.add(vBox); /*产生垂直排列方式的Box组件来安置第二与另一个水平排列方式的Box组件 */ Box vBox1=Box.createVerticalBox(); baseBox.add(vBox1); b=new JButton("second"); b.setAlignmentX(Component.CENTER_ALIGNMENT); b.setMaximumSize(new Dimension(300,50)); vBox1.add(b); Box hBox=Box.createHorizontalBox(); vBox1.add(hBox); /*将第四与最后一个按钮加入水平排列方式的Box组件中 */ Box vBox2=Box.createVerticalBox(); vBox2.add(Box.createVerticalStrut(50)); vBox2.add(new JButton("fourth")); vBox2.add(Box.createVerticalStrut(50)); hBox.add(vBox2); Box vBox3=Box.createVerticalBox(); vBox3.add(Box.createVerticalGlue()); vBox3.add(new JButton("THis is the last button")); hBox.add(vBox3); f.setTitle("BoxLayout"); f.pack(); f.setVisible(true); f.addWindowListener( new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0); } } ); } public static void main(String[] args){ BoxLayoutDemo b=new BoxLayoutDemo(); }}
[解决办法]
建议使用TableLayout, 比GridbagLayout简单很多.
http://java.sun.com/products/jfc/tsc/articles/tablelayout/
[解决办法]
麻烦点的就是先来个4行1列
然后把第一行定为:1行3列
第二行定为:1行3列
。。。。
第二行:中间列再分~~
麻烦的可以慢慢实现~~~
我也刚刚学JAVA。。。
[解决办法]
直接用NETBEAN 的可视化制作 JFRAM
然后 在看生成的源代码 这个是 标准