gridbagconstraints的简单介绍
java gui中怎么用jpanel实现组件的绝对定位
相对定位是利用布局管理器GridBagLayout()?来实现的GridBagLayout?布局是根据GridBagConstraints()?来设定的GridBagConstraints主要有8个重要参数需要掌握非别是
gridx,gridy? ——? 设置组件的位置,
? ? ? ? ? ? ? ? ?gridx设置为GridBagConstraints.RELATIVE代表此组件位于之前所加入组件的右边。
? ? ? ? ? ? ? ? ?gridy设置为GridBagConstraints.RELATIVE代表此组件位于以前所加入组件的下面。
? ? ? ? ? ? ? ? ?建议定义出gridx,gridy的位置以便以后维护程序。gridx=0,gridy=0时放在0行0列。
gridwidth,gridheight? ——? 用来设置组件所占的单位长度与高度,默认值皆为1。
? ? ? ? ? ? ? ? ? ? ? ? ? 你可以使用GridBagConstraints.REMAINDER常量,代表此组件为此行或此列的最后一个组件,而且会占据所有剩余的空间。
weightx,weighty? ——? 用来设置窗口变大时,各组件跟着变大的比例。
? ? ? ? ? ? ? ? ? ? ?当数字越大,表示组件能得到更多的空间,默认值皆为0。
anchor? ——? 当组件空间大于组件本身时,要将组件置于何处。
? ? ? ? ? ? 有CENTER(默认值)、NORTH、NORTHEAST、EAST、SOUTHEAST、WEST、NORTHWEST选择。
insets? ——? 设置组件之间彼此的间距。
? ? ? ? ? ? 它有四个参数,分别是上,左,下,右,默认为(0,0,0,0)。
ipadx,ipady? ——? 设置组件间距,默认值为0。
GridBagLayout里的各种设置都必须通过GridBagConstraints,因此当我们将GridBagConstraints的参数都设置
好了之后,必须new一个GridBagConstraints的对象出来,以便GridBagLayout使用。
构造函数:
? GirdBagLayout()建立一个新的GridBagLayout管理器。
? GridBagConstraints()建立一个新的GridBagConstraints对象。
? GridBagConstraints(int?gridx,int?gridy,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?int?gridwidth,int?gridheight,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?double?weightx,double?weighty,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?int?anchor,int?fill,?Insets?insets,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?int?ipadx,int?ipady)建立一个新的GridBagConstraints对象,并指定其参数的值
下面是我的例程:
实现
import?javax.swing.*;
import?java.util.*;
import?java.awt.*;
public?class?Example?extends?JFrame{
private?void?makeComponent(GridBagLayout?gbLaout,GridBagConstraints?constraints,Component?component)
{
gbLaout.setConstraints(component,?constraints);
add(component);
}
? public?static?void?main(String?args[])?{
? Example?exp=new?Example();
? ? ?GridBagLayout?gridbag?=?new?GridBagLayout();
? ? ?GridBagConstraints?c?=?new?GridBagConstraints();
? ? ?exp.setLayout(gridbag);
? ?
? ? ?JButton?jb1=new?JButton("JButton1");
? ?
? ? ?c.gridx=0;
? ? ?c.gridy=0;
? ? ?c.gridwidth=1;
? ? ?c.gridheight=1;
? ? ?c.weightx=1;
? ? ?c.weighty=0;
? ?
? ? ?c.anchor=GridBagConstraints.CENTER;
? ? ?c.fill=GridBagConstraints.HORIZONTAL;
? ?
? ? ?c.insets=new?Insets(0,0,0,0);
? ? ?c.ipadx=0;
? ? ?c.ipady=0;
? ? ?exp.makeComponent(gridbag,c,jb1);
? ?
? ? ?JButton?jb2=new?JButton("JButton2");
? ? ?c.gridx=1;
? ? ?exp.makeComponent(gridbag,c,jb2);
? ? ?JButton?jb3=new?JButton("JButton2");
? ? ?c.gridx=2;
? ? ?exp.makeComponent(gridbag,c,jb3);
? ? ?JButton?jb4=new?JButton("JButton2");
? ? ?c.gridx=3;
? ? ?exp.makeComponent(gridbag,c,jb4);
? ?
? ? ?JButton?jb5=new?JButton("JButton5");
? ? ?c.gridx=0;
? ? ?c.gridy=1;
? ? ?c.gridheight=1;
? ? ?c.gridwidth=4;
? ? ?exp.makeComponent(gridbag,c,jb5);
? ?
? ? ?JButton?jb6=new?JButton("JButton6");
? ? ?c.gridx=0;
? ? ?c.gridy=2;
? ? ?c.gridwidth=3;
? ? ?exp.makeComponent(gridbag,c,jb6);
? ?
? ? ?JButton?jb7=new?JButton("JButton7");
? ? ?c.gridx=3;
? ? ?c.gridy=2;
? ? ?c.gridwidth=1;
? ? ?exp.makeComponent(gridbag,c,jb7);
? ?
? ? ?JButton?jb8=new?JButton("JButton8");
? ? ?c.gridx=0;
? ? ?c.gridy=3;
? ? ?c.gridwidth=1;
? ? ?c.gridheight=2;
? ? ?c.fill=GridBagConstraints.BOTH;
? ? ?exp.makeComponent(gridbag,c,jb8);
? ?
? ? ?JButton?jb9=new?JButton("JButton9");
? ? ?c.gridx=1;
? ? ?c.gridy=3;
? ? ?c.gridwidth=3;
? ? ?c.gridheight=1;
? ? ?c.fill=GridBagConstraints.HORIZONTAL;
? ? ?exp.makeComponent(gridbag,c,jb9);
? ?
? ? ?JButton?jb10=new?JButton("JButton10");
? ? ?c.gridx=1;
? ? ?c.gridy=4;
? ? ?c.gridwidth=3;
? ? ?c.gridheight=1;
? ? ?c.fill=GridBagConstraints.HORIZONTAL;
? ? ?exp.makeComponent(gridbag,c,jb10);
? ?
? ? ?exp.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
? ? ?exp.setSize(500,500);
? ? ?exp.setVisible(true);
? }
}
g panel的默认布局管理器是什么
g panel的默认布局管理器是BorderLayout 还有FlowLayout,GridLayout,GridBagLayout 需要了解下各个布局的样式你也可以把他设置为空。
BorderLayout是Window、Frame和Dialog的默认布局管理器,其将容器分成North、South、East、West和Center 5个区域,每个区域只能放置一个组件。使用BorderLayout时,如果容器大小发生变换,组件的相对位置不变。
使用网格包布局的第二种方法:
1、使GridBagLayout布局成为当前容器的布局管理器,这里也可以不用创建GridBagLayout对象。
2、创建一个GridBagConstraints类型的约束对象,然后使用该对象设置约束条件。注意这里设置的约束条件并没有针对某一组件,要使某一组件具有设置的约束,需要使用第3步骤的方法。
3、然后使用add(Component com, Object cons)方法将组件和约束同时添加进容器中,这样添加进容器的组件就具有了第2步的约束。注意其中的add(Component com, Object cons);第一个参数是将要添加的组件,第二个参数是要添加的GridBagConstraints类型的约束对象。
能保存计算过程的计算器java代码?
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("计算器");
container=getContentPane();
layout=new GridBagLayout();
container.setLayout(layout);
constraints=new GridBagConstraints();
start=true;
result=0;
lastCommand = "=";
displayField=new JTextField(20);
displayField.setText("0.0");
displayField.setcolor(red);
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("7",0,2,1,1,insert);
addButton("8",1,2,1,1,insert);
addButton("9",2,2,1,1,insert);
addButton("/",3,5,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,4,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,3,1,1,command);
addButton("0",1,5,1,1,insert);
addButton("=",2,5,1,1,command);
addButton(".",0,5,1,1,insert);
addButton("+",3,2,1,1,command);
setSize(180,200);
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;
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的table如何设置默认宽度啊
逐个Column设置,
TableColumn 有方法
void
setMaxWidth(int maxWidth)
将 TableColumn 的最大宽度设置为 maxWidth;如果 maxWidth 小于最小宽度,则设置为最小宽度。
void
setMinWidth(int minWidth)
将 TableColumn 的最小宽度设置为 minWidth,如有必要,调整新的最小宽度以确保 0 = minWidth = maxWidth。
void
setPreferredWidth(int preferredWidth)
将此列的首选宽度设置为 preferredWidth。
void
setWidth(int width)
不应使用此方法来设置 JTable 中列的宽度,而应使用 setPreferredWidth。
void
sizeWidthToFit()
调整 TableColumn 的大小,以适合其标题单元格的宽度。
请问下怎么解决这个提示cannot add to layout: constraint must be a string (or null)
你没有给你的主窗口设置布局管理器。
你可以在ExampleFrame03方法加上这句试试:this.setLayout(new?GridBagLayout());
参考资料:网页链接