我有一个JTable
并且我在它下面放了3 JButton
个。我已经设法将左侧按钮放在左上角,右侧按钮放在右侧角落,但我无法弄清楚如何将中间按钮放在中间位置。我尝试过使用.weightx
和.anchor
而没有任何结果。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumn;
public class AccessView extends JPanel{
String[] columnNames = {"Date","Time","Type of access"};
DefaultTableModel tableModel;
JTable tAccesses;
JScrollPane scrollPane;
JButton bAdd, bMod, bDel;
public AccessView(){
createGUI();
}
public void createGUI(){
this.setBorder(BorderFactory.createTitledBorder("Accesses"));
this.setLayout(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
bAdd = new JButton("Add");
bMod = new JButton("Mod");
bDel = new JButton("Del");
tableModel = new DefaultTableModel(25,columnNames.length);
tableModel.setColumnIdentifiers(columnNames);
tAccesses = new JTable(tableModel);
scrollPane = new JScrollPane(tAccesses);
c.gridx = 0;
c.gridy = 0;
c.gridwidth = 3;
this.add(scrollPane, c);
c.gridx = 0;
c.gridy = 1;
c.gridwidth = 1;
c.anchor = GridBagConstraints.LAST_LINE_START;
this.add(bAdd, c);
c.gridx = 1;
c.gridy = 1;
this.add(bMod, c);
c.gridx = 2;
c.gridy = 1;
c.anchor = GridBagConstraints.LAST_LINE_END;
this.add(bDel, c);
}
}
答案 0 :(得分:3)
根据上面的评论中的建议,您可以使用另外JPanel
作为3 JButton
。
对BoxLayout
使用JPanel
,其中包含3 JButton
和Box.createHorizontalGlue()
JButton
之间的JPanel
,您可以获得以下输出:
在这种情况下:
创建新的JPanel buttonsPane;
BoxLayout
初始化并将其布局设置为buttonsPane = new JPanel();
buttonsPane.setLayout(new BoxLayout(buttonsPane, BoxLayout.LINE_AXIS));
Box.createHorizontalGlue()
在它们之间添加按钮和buttonsPane.add(bAdd);
buttonsPane.add(Box.createHorizontalGlue());
buttonsPane.add(bMod);
buttonsPane.add(Box.createHorizontalGlue());
buttonsPane.add(bDel);
:
buttonsPane
将JFrame
添加到SOUTH
JPanel
对齐方式(或将其与当前frame.add(this);
frame.add(buttonsPane, BorderLayout.SOUTH);
一起添加,然后修改其约束条件(I使用前者)):
JButton
你可以获得类似结果的另一种方法(根据下面的@MadProgrammer评论)将改变你的约束并添加"空" c.gridx = 0;
c.gridy = 1;
c.gridwidth = 1;
c.weightx = 1;
this.add(bAdd, c);
c.gridx = 1;
this.add(new JLabel(""), c); //Empty component just for the extra space
c.gridx = 2;
this.add(bMod, c);
c.gridx = 3;
this.add(new JLabel(""), c); //Empty component just for the extra space
c.gridx = 4;
this.add(bDel, c);
s:
resolveMaxAttempts()
产生:
答案 1 :(得分:0)
有一些方法可以做到这一点:
JPanel
并拥有GridBagLayout
整体
面板,你可以为按钮添加额外的行。看起来像
Web中的表格布局 - 实际上是。有赞成和反对
与表格布局。主要缺点是在长期项目中难以保留。特别是,您无法在其他地方重复使用按钮。ButtonPanel
后,您可以
学习Oracle tutorial我注意到最后一个选项更可取。根据我的个人经验,这是一种最佳实践