我正在制作一个以这种方式运作的GUI:
就像一堆元素。我在我的堆栈中输入一个元素,我想要在我的JPanel的中心(在JScrollPane中)。我添加的下一个元素需要位于中心,最后一个元素是X向左。我添加一个新元素并发生相同。当一个元素不在JPanel中时,JScrollPane需要激活,让我滚动到左侧查看全部。
JPanel a = new JPanel();
this.setBackground(new java.awt.Color(200, 200, 200));
this.setPreferredSize(new java.awt.Dimension(father.getSize().width, height));
BoxLayout aaa = new BoxLayout(this,1);
this.setLayout(aaa);
FlowLayout MigasDePanLayout = new FlowLayout(0,80,0); //Este es la separacion entre elementos
a.setLayout(MigasDePanLayout);
JButton ab = null;
sp = new JScrollPane(a);
sp.setVerticalScrollBarPolicy(javax.swing.ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER);
sp.setHorizontalScrollBarPolicy(javax.swing.ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
sp.setBounds(0, 0,father.getSize().width, height);
this.add(sp);
father.add(this, java.awt.BorderLayout.PAGE_END);
for (int i = 0; i < 20; i++) {
ab = new JButton("HHH");
ab.setLocation(i*20, 0);
a.add(ab);
}
addMouseListener(this);
addMouseMotionListener(this);
}
我有这段代码(父亲是JPanel)。
我使用布局来获取每个元素的分离,但是当我添加一个新元素时,总是在从左边开始的第一个洞上设置
[] [] []
我添加了一个新元素
[A] [] []
我想要这个:
[] [A] []
或者这个,但是将元素放在视图的中心:
[] [] [A] - &gt; [] | [] [A] []
但我不知道我是否可以选择我想放置元素的位置。
我读到必须删除布局是免费的,你可以把元素(在这种情况下的按钮)放在X Y的位置。
有人知道是否有办法将元素置于我想要的位置? (是从右到左而不是从左到右插入,但以元素为中心的东西)
我需要删除布局或创建另一个组件来实现我的目标吗?
谢谢你的时间!
答案 0 :(得分:3)
但我不知道我是否可以选择我想放置元素的位置。
您可以使用:
panel.add(component, index);
将组件插入特定位置。大多数布局管理器(如BoxLayout,FlowLayout和GridLayout)不使用约束将遵循此参数。
int count = panel.getComponentCount();
因此索引的值必须小于计数。
(是从右到左而不是从左到右插入,但以元素为中心的东西)
因此,当使用具有中心对齐的FlowLayout时,您只需要:
panel.add(component, 0);
另外,请勿使用以下代码:
ab.setLocation(i * 20,0);
它会让人感到困惑,因为它会被忽略,因为布局管理器会设置位置和大小。