gridbagconstraints的简单介绍

http://www.itjxue.com  2023-03-19 08:56  来源:未知  点击次数: 

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());

参考资料:网页链接

(责任编辑:IT教学网)

更多
上一篇:没有了

推荐linux文章