使用gridbaglayout布局方式的疑问

wkc720 2018-10-09 09:24:54
利用GridBagLayout布局方式进行布局。想让表格显示在左边,占9*9的格子。想让2个按钮显示在(11,7)和(11,9)的位置。为什么编程后,两个按钮的位置不对,其中“添加”按钮跑到最上面了?为什么会出现这种情况?想达到自己想要的效果该如何编写代码呢?还请多多指教。
注:配图右图是我想要的效果,图里面的数值是我标注的坐标,和实际编程后出现的效果(左图)。

import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Vector;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;

public class ExampleFrame_0333 extends JFrame {
private JButton okbutton;
private JButton addbutton;
private JTable table;

public static void main(String args[]) {
ExampleFrame_0333 frame = new ExampleFrame_0333();
frame.setVisible(true);
}

public ExampleFrame_0333() {
super();
setTitle("使用网格组布局管理器");
getContentPane().setLayout(new GridBagLayout());
setBounds(100, 100, 500, 370);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

table=new JTable();
table.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
table.setEnabled(true);
DefaultTableModel dftm=(DefaultTableModel) table.getModel();
dftm.setColumnIdentifiers(new String[] {"型号","线别","站位","原始部番"});
dftm.addRow(new Vector());
table.setModel(dftm);

JScrollPane scrollpane=new JScrollPane(table);
GridBagConstraints gridbagconstraints_1=new GridBagConstraints();
gridbagconstraints_1.gridx=0;
gridbagconstraints_1.gridy=0;
gridbagconstraints_1.gridwidth=9;
gridbagconstraints_1.gridheight=9;
gridbagconstraints_1.weightx=1.0;
gridbagconstraints_1.weighty=1.0;
gridbagconstraints_1.fill=GridBagConstraints.BOTH;
gridbagconstraints_1.insets=new Insets(3,3,3,3);
getContentPane().add(scrollpane,gridbagconstraints_1);

addbutton=new JButton("添加");
GridBagConstraints gridbagconstraints_2=new GridBagConstraints();
gridbagconstraints_2.gridx=11;
gridbagconstraints_2.gridy=7;
gridbagconstraints_2.insets=new Insets(3,3,3,3);
getContentPane().add(addbutton,gridbagconstraints_2);
addbutton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
DefaultTableModel model=(DefaultTableModel) table.getModel();
model.addRow(new Vector());

}

});

okbutton=new JButton("完成");
GridBagConstraints gridbagconstraints_3=new GridBagConstraints();
gridbagconstraints_3.gridx=11;
gridbagconstraints_3.gridy=9;
gridbagconstraints_3.insets=new Insets(3,3,3,3);
gridbagconstraints_1.fill=GridBagConstraints.VERTICAL;
getContentPane().add(okbutton,gridbagconstraints_3);
}

}
...全文
379 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
wkc720 2018-10-10
  • 打赏
  • 举报
回复
引用 6 楼 Surrin1999 的回复:
[quote=引用 5 楼 wkc720 的回复:] [quote=引用 3 楼 Surrin1999 的回复:] [quote=引用 2 楼 wkc720 的回复:] 因为是在练习使用这种布局方式,如果想达到我想要的效果,那正确的操作方法应该怎么做?
我用的方法可能比较笨但管用 用绝对布局就好了[/quote] 绝对布局?是gridbaglayout里的吗?[/quote] 就是不设置任何布局 手动设置每个组件的位置坐标[/quote] 你说的我明白了,谢谢。目前我在练习使用gridbaglayout布局方式。
qq_39936465 2018-10-09
  • 打赏
  • 举报
回复
虽然gridbaglayout 可以设置组件放置的行列,但不表示组件和组件之间可以隔空相连,组件还是一个靠一个挨着的,你这样放置,组件肯定自己移位了,空白处需要用其他组件填充的。
Surrin1999 2018-10-09
  • 打赏
  • 举报
回复
引用 5 楼 wkc720 的回复:
[quote=引用 3 楼 Surrin1999 的回复:]
[quote=引用 2 楼 wkc720 的回复:]
因为是在练习使用这种布局方式,如果想达到我想要的效果,那正确的操作方法应该怎么做?


我用的方法可能比较笨但管用 用绝对布局就好了[/quote]

绝对布局?是gridbaglayout里的吗?[/quote]

就是不设置任何布局 手动设置每个组件的位置坐标
wkc720 2018-10-09
  • 打赏
  • 举报
回复
引用 3 楼 Surrin1999 的回复:
[quote=引用 2 楼 wkc720 的回复:] 因为是在练习使用这种布局方式,如果想达到我想要的效果,那正确的操作方法应该怎么做?
我用的方法可能比较笨但管用 用绝对布局就好了[/quote] 绝对布局?是gridbaglayout里的吗?
qq_39936465 2018-10-09
  • 打赏
  • 举报
回复
方法很多种,最简单就是沿着你第2张图 的组件边缘画横向和纵向线,然后空白的地方填上label空白组件即可。
Surrin1999 2018-10-09
  • 打赏
  • 举报
回复
引用 2 楼 wkc720 的回复:
因为是在练习使用这种布局方式,如果想达到我想要的效果,那正确的操作方法应该怎么做?


我用的方法可能比较笨但管用 用绝对布局就好了
wkc720 2018-10-09
  • 打赏
  • 举报
回复
因为是在练习使用这种布局方式,如果想达到我想要的效果,那正确的操作方法应该怎么做?

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧