读书人

jframe布局的有关问题

发布时间: 2012-01-12 22:11:58 作者: rapoo

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行六列。


[解决办法]
你看看下面这个

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

然后 在看生成的源代码 这个是 标准

读书人网 >J2SE开发

热点推荐