Java GridLayout列数错误
我正在尝试创建带有网格布局(7,2)的面板 但是,当我添加组件(标签、组合框、文本字段等)时,组件显示在3列中,如下所示: 我尝试将列数更改为1甚至0,但面板保持不变。 我能做什么 编辑: 以下是更多代码:Java GridLayout列数错误,java,swing,jpanel,grid-layout,Java,Swing,Jpanel,Grid Layout,我正在尝试创建带有网格布局(7,2)的面板 但是,当我添加组件(标签、组合框、文本字段等)时,组件显示在3列中,如下所示: 我尝试将列数更改为1甚至0,但面板保持不变。 我能做什么 编辑: 以下是更多代码: p1 = new JPanel(); membersPanel = new JPanel(new GridLayout(7,0)); resourcesLabel = new JLabel("Resources"); membersPanel.add(resourcesLabe
p1 = new JPanel();
membersPanel = new JPanel(new GridLayout(7,0));
resourcesLabel = new JLabel("Resources");
membersPanel.add(resourcesLabel);
emptyLabel5 = new JLabel("");
membersPanel.add(emptyLabel5);
emptyLabel6 = new JLabel("");
membersPanel.add(emptyLabel6);
comboBoxResource = new JComboBox(configs.XMLreaderDOM4J.readResourceID());
membersPanel.add(comboBoxResource);
slider1 = new SliderWithTextField(1,10);
textSli1 = new TextFieldFromSlider(this, slider1);
slider1.setTextField(textSli1);
slider1.setValue(1);
membersPanel.add(slider1);
membersPanel.add(textSli1);
emptyLabel2 = new JLabel();
membersPanel.add(emptyLabel2);
addButton1 = new JButton("Add");
addButton1.addActionListener(new TrataEvento());
membersPanel.add(addButton1);
agregator1Label = new JLabel("Agretagor1");
membersPanel.add(agregator1Label);
comboBoxAgregator1 = new JComboBox(configs.XMLreaderDOM4J.readAgregator1ID());
membersPanel.add(comboBoxAgregator1);
slider2 = new SliderWithTextField(1,10);
textSli2 = new TextFieldFromSlider(this, slider2);
slider2.setTextField(textSli2);
slider2.setValue(1);
membersPanel.add(slider2);
membersPanel.add(textSli2);
addButton2 = new JButton("Add");
addButton2.addActionListener(new TrataEvento());
membersPanel.add(addButton2);
emptyLabel3 = new JLabel();
membersPanel.add(emptyLabel3);
agregator0Label = new JLabel("Agregator0");
membersPanel.add(agregator0Label);
comboBoxAgregator0 = new JComboBox(configs.XMLreaderDOM4J.readAgregator0ID());
membersPanel.add(comboBoxAgregator0);
slider3 = new SliderWithTextField(1,10);
textSli3 = new TextFieldFromSlider(this, slider3);
slider3.setTextField(textSli3);
slider3.setValue(1);
membersPanel.add(slider3);
membersPanel.add(textSli3);
addButton3 = new JButton("Add");
addButton3.addActionListener(new TrataEvento());
membersPanel.add(addButton3);
emptyLabel4 = new JLabel();
membersPanel.add(emptyLabel4);
p1.add(membersPanel);
- GridLayout(7,2)的JComponent layerd的数量与一个容器中的JComponents不对应
- 必须在一个容器中放置21个以上的JC组件
super的输出(新的GridLayout(8,8))代码>
super(新网格布局(N,N))的输出代码>
源代码
import java.awt.EventQueue;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.beans.EventHandler;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
/** based on @see http://stackoverflow.com/questions/7702697 */
public class GridButtonPanel extends JPanel {
private static final int N = 4;
private final List<GridButton> list = new ArrayList<GridButton>();
public GridButtonPanel() {
//super(new GridLayout(8, 8));
super(new GridLayout(N, N));
for (int i = 0; i < N * N; i++) {
int row = i / N;
int col = i % N;
GridButton gb = new GridButton(row, col);
gb.addActionListener((ActionListener) EventHandler.create(ActionListener.class, this,
"actionName" + row + "A" + col));
list.add(gb);
this.add(gb);
}
}
public void actionName0A0() {
System.out.println(" Grid at Row 0, Column 0 ");
}
public void actionName0A1() {
System.out.println(" Grid at Row 0, Column 1 ");
}
public void actionName1A0() {
System.out.println(" Grid at Row 1, Column 0 ");
}
public void actionName1A1() {
System.out.println(" Grid at Row 1, Column 1 ");
}
private GridButton getGridButton(int r, int c) {
int index = r * N + c;
return list.get(index);
}
private class GridButton extends JButton {
private int row;
private int col;
public GridButton(int row, int col) {
super("Row - " + row + ", Col - " + col);
this.row = row;
this.col = col;
this.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
int r = GridButton.this.row;
int c = GridButton.this.col;
GridButton gb = GridButtonPanel.this.getGridButton(r, c);
System.out.println("r" + r + ",c" + c
+ " " + (GridButton.this == gb)
+ " " + (GridButton.this.equals(gb)));
}
});
}
}
private void display() {
JFrame f = new JFrame("GridButton");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add(this);
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new GridButtonPanel().display();
}
});
}
}
导入java.awt.EventQueue;
导入java.awt.GridLayout;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入java.beans.EventHandler;
导入java.util.ArrayList;
导入java.util.List;
导入javax.swing.JButton;
导入javax.swing.JFrame;
导入javax.swing.JPanel;
/**基于@seehttp://stackoverflow.com/questions/7702697 */
公共类GridButtonPanel扩展了JPanel{
专用静态最终整数N=4;
私有最终列表=新的ArrayList();
公共网格按钮面板(){
//超级(新网格布局(8,8));
超级(新网格布局(N,N));
对于(int i=0;i
如果添加的组件数量超过原始指定数量,Swing将调整用于GridLayout
的列数。使用0
指定可调整的行数:
membersPanel = new JPanel(new GridLayout(0, 2));
这将使将来的重构变得更容易。您能提供更多的代码吗?现在,我刚刚编辑了帖子。您正在尝试在面板中添加14个以上的组件,或者7 x 2=14。请尝试这样做:GridLayout(0,2)代码>我相信这将为您提供所需的行数和2列数。来源:或者我认为他可以简单地执行GridLayout(0,2)
,这样他就不需要指定行数。编辑好答案+1为源代码和示例!谢谢,但这对我不起作用,我不知道为什么。我使用了GridLayout(0,2)
,它非常完美。
membersPanel = new JPanel(new GridLayout(0, 2));