java gridbaglayout 一个组件变化会影响其它组件的大小,能不能做一个设置能让每个组件的大小和位置固定呢

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java gridbaglayout 一个组件变化会影响其它组件的大小,能不能做一个设置能让每个组件的大小和位置固定呢相关的知识,希望对你有一定的参考价值。

使用复合的布局,,,,,不然就不使用布局,自设定大小和位置
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~
参考技术A GridBagConstraints才能达到设置的效果。 GridBagLayout的类层次结构图: java.代表此组件为此行或此列的最后一个组件,而且会GridLayout会将所填进去组件 参考技术B 是做计算器吧!!!
我 把按钮也都填上去啦
import java.awt.*;
import javax.swing.*;
import javax.swing.border.*;
public class PP
JFrame f;
JMenuBar mb;
JMenu m1,m2,m3;
JMenuItem c1,v,t1,s,i,h,a;
Font t;ImageIcon img;JTextField t2;
GridBagConstraints c;GridBagLayout gridbag;
Container contentPane;JPanel p;
public PP()
f=new JFrame("计算器");
f.setBounds(200,200,300,300);
img =new ImageIcon("图片/3.jpg");
f.setIconImage(img.getImage());
f.setResizable(false);
c=new GridBagConstraints();
gridbag=new GridBagLayout();

mb=new JMenuBar();//创建菜单棒

m1=new JMenu("编辑(E)");
c1=new JMenuItem("复制(C) Ctrl+c");
v=new JMenuItem("粘贴(V) Ctrl+v");

m2=new JMenu("查看(V)");
t1=new JMenuItem("标准型(T)");
s=new JMenuItem("科学型(V)");
i=new JMenuItem("数学分组(V)");

m3=new JMenu("帮助(H)");
h=new JMenuItem("帮助主题(H)");
a=new JMenuItem("关于计算器(A)");
Font t=new Font("sanserif",Font.PLAIN,12);
contentPane=f.getContentPane();
contentPane.setLayout(gridbag);
addEditMenu();
addJMenuBar();
addHelpMenu();
addViewMenu();
addJTextField(t2,0,0,6,1);
addJPanel(p,0,1,6,1);
addJButton("MC",0,2,1,1,Color.RED);
addJButton("7",1,2,1,1,Color.BLUE);
addJButton("8",2,2,1,1,Color.BLUE);
addJButton("9",3,2,1,1,Color.BLUE);
addJButton("/",4,2,1,1,Color.RED);
addJButton("sqrt",5,2,1,1,Color.BLUE);
addJButton("MR",0,3,1,1,Color.RED);
addJButton("4",1,3,1,1,Color.BLUE);
addJButton("5",2,3,1,1,Color.BLUE);
addJButton("6",3,3,1,1,Color.BLUE);
addJButton("*",4,3,1,1,Color.RED);
addJButton("%",5,3,1,1,Color.BLUE);
addJButton("MR",0,4,1,1,Color.RED);
addJButton("1",1,4,1,1,Color.BLUE);
addJButton("2",2,4,1,1,Color.BLUE);
addJButton("3",3,4,1,1,Color.BLUE);
addJButton("-",4,4,1,1,Color.RED);
addJButton("1/x",5,4,1,1,Color.BLUE);
addJButton("M+",0,5,1,1,Color.RED);
addJButton("0",1,5,1,1,Color.BLUE);
addJButton("+/-",2,5,1,1,Color.BLUE);
addJButton(".",3,5,1,1,Color.BLUE);
addJButton("+",4,5,1,1,Color.RED);
addJButton("=",5,5,1,1,Color.RED);
f.setJMenuBar(mb);
f.setVisible(true);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

private void addEditMenu()
m1.add(c1); m1.addSeparator();m1.add(v);m1.setFont(t);

private void addViewMenu()
m2.add(t1); m2.addSeparator();m2.add(s);m2.addSeparator();m2.add(i);
m2.setFont(t);

private void addHelpMenu()
m3.add(h); m3.addSeparator();m3.add(a);m3.setFont(t);

private void addJMenuBar()
mb.add(m1); mb.add(m2); mb.add(m3);

private void addJTextField(JTextField t2,int x,int y,int width,int height)
t2=new JTextField("0.",18);
//t2.setBorder(BorderFactory.creatBevelBorder(BevelBorder.LOWERED));
t2.setHorizontalAlignment(JTextField.RIGHT);
t2.setEditable(false);t2.setBackground(Color.WHITE);
c.gridx=x;
c.gridy=y;
c.gridwidth=width;
c.gridheight=height;

c.anchor=GridBagConstraints.CENTER;
c.fill=GridBagConstraints.BOTH;
c.insets=new Insets(0,2,2,2);
gridbag.setConstraints(t2,c);
contentPane.add(t2);

private void addJPanel(JPanel p,int x,int y,int width,int height)
p=new JPanel();
JLabel l=new JLabel();
l.setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED));
JButton b=new JButton("Backspace");
JButton b1=new JButton(" CE ");
JButton b2=new JButton(" C ");
b.setForeground(Color.RED);
b1.setForeground(Color.RED);
b2.setForeground(Color.RED);
p.add(l);p.add(b);
p.add(b1);p.add(b2);
c.gridx=x;
c.gridy=y;
c.gridwidth=width;
c.gridheight=height;

c.anchor=GridBagConstraints.CENTER;
c.fill=GridBagConstraints.BOTH;
c.insets=new Insets(1,1,2,2);
gridbag.setConstraints(p,c);
contentPane.add(p);

private void addJButton(String name,int gridx,int gridy,int gridwidth,int gridheight,Color yanse)
JButton button =new JButton(name);
button.setForeground(yanse);
c.gridx=gridx;
c.gridy=gridy;
c.gridwidth=gridwidth;
c.gridheight=gridheight;
c.anchor=GridBagConstraints.CENTER;
c.fill=GridBagConstraints.BOTH;
c.insets=new Insets(2,2,0,1);
gridbag.setConstraints(button,c);
contentPane.add(button);

public static void main(String[] args)
PP p1=new PP();


GridBagLayout Java 中的边距/填充

【中文标题】GridBagLayout Java 中的边距/填充【英文标题】:Margin/padding in GridBagLayout Java 【发布时间】:2011-06-18 01:18:59 【问题描述】:

    是否可以在GridBagLayout 中为整行/列设置边距/填充?但是,我在约束对象上使用插图,使用这种方法我需要在每个组件上从底部设置填充。

    是否可以填充JFrame 中的所有内容?因为现在每个组件都与框架对齐。

  constraints.weightx = 2;
  constraints.weighty = 1;
  constraints.fill = GridBagConstraints.BOTH;
  addComponent(this, layout, constraints, questionPanel = new QuestionPanel(), 0, 0, 1, 1);

  constraints.weightx = 1;
  constraints.weighty = 1;
  constraints.fill = GridBagConstraints.BOTH;
  addComponent(this, layout, constraints, categoryPanel = new CategoryPanel(), 0, 1, 1, 1);

  constraints.weightx = 1;
  constraints.weighty = 0;
  constraints.fill = GridBagConstraints.HORIZONTAL;
  addComponent(this, layout, constraints, answerPanel = new AnswerPanel(), 1, 0, 2, 1);

  constraints.weightx = 1;
  constraints.weighty = 2;
  constraints.fill = GridBagConstraints.BOTH;
  addComponent(this, layout, constraints, tabPane = new JTabbedPane(), 2, 0, 2, 1);

  constraints.weightx = 1;
  constraints.weighty = 0;
  constraints.fill = GridBagConstraints.NONE;
  constraints.anchor = GridBagConstraints.SOUTHEAST;
  addComponent(this, layout, constraints, buttonPanel = new ButtonPanel(), 3, 1, 1, 1);

我正在使用私有方法 addComponent:

private void addComponent(Container context, GridBagLayout _layout, GridBagConstraints            _constraints, Component component, int row, int column, int width, int height) 
  _constraints.gridx = column;
  _constraints.gridy = row;
  _constraints.gridwidth = width;
  _constraints.gridheight = height;

  _layout.setConstraints(component, _constraints);
  context.add(component);
 

如何在单元格之间添加一些“空气(填充/边距)”?

【问题讨论】:

我会说是的,是的......但是,如果不查看某些代码,很难确定。你能发布一个sn-p吗?这会很有帮助,你的问题很笼统。 投反对票,因为有两个问题。 【参考方案1】:

使用GridBagConstraints 类的inset 属性

例如:

GridBagConstraints c = new GridBagConstraints();
c.insets = new Insets(3,3,3,3);

希望这是您正在寻找的。​​p>

【讨论】:

【参考方案2】:

据我所知,做第一个的唯一方法为每个约束设置一个 Insets 对象...(手动编码布局显然不是为了便于Java :P)

但是有一种非常简单的方法来做第二个,而不用弄乱任何 Insets 或任何东西:将 contentPane 的布局设置为 FlowLayout,并带有您想要的任何垂直和水平间隙,将面板添加到 contentPane,而不是将所有内容添加到 contentPane 中,将其添加到您的新面板中。

【讨论】:

以上是关于java gridbaglayout 一个组件变化会影响其它组件的大小,能不能做一个设置能让每个组件的大小和位置固定呢的主要内容,如果未能解决你的问题,请参考以下文章

在 java 中使用 GridBagLayout 时设置最大组件大小

在 Java 中使用 GridBagLayout 时防止 Swing 组件偏离中心

Java GridBagLayout组件不会到达指定位置

如何使用 GridBagLayout 定位组件?

Java图形化界面设计——布局管理器之GridBagLayout

GridBagLayout()的使用方法