现在我有以下代码将JLabel添加到Panel的顶部中心,我认为这是默认的
imageLabel = new JLabel();
ImageIcon customer1 = new ImageIcon("src/view/images/crab.png");
imageLabel.setIcon(customer1);
storePanel.add(imageLabel);
imageLabel.setBounds(20, 20, 50, 50);
setBounds显然不是把它放在20,20 ....所以你如何将某些东西定位到Panel中的某个点?
答案 0 :(得分:2)
使用适当的LayoutManager在面板中放置组件。
http://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html
在您的情况下,您应该能够使用FlowLayout
并在创建时设置水平和垂直间隙。
http://docs.oracle.com/javase/7/docs/api/java/awt/FlowLayout.html#FlowLayout(int,%20int,%20int)
答案 1 :(得分:2)
由于storePanel
无法正常工作,因此您的JPanel
似乎是FlowLayout
且默认setBounds(20, 20, 50, 50);
经理。它将使用null布局(storePanel.setLayout(null);
)。
但我建议您使用LayoutManager
。
答案 2 :(得分:1)
虽然不推荐,但如果将布局管理器设置为null
,则可以进行绝对定位。
storePanel.setLayout(null);
// imageLabel initialization code
storePanel.add(imageLabel);
imageLabel.setBounds(20, 20, 50, 50);
我的建议是使用Good IDE + UI Builder组合,例如:
Thease是WYSIWYG工具,可以使用灵活的布局管理器生成Swing代码,例如Group Layout或JGoodies Form Layout。
如果要设计好的UI,布局管理器是必须的。它们不仅可以处理组件的大小和位置,还可以重新分配/重新定位/调整窗口大小等组件(这很难直接获得)。此外,那些UI设计师可以暗示您,以便您遵循指南和最佳实践,以设计高质量/跨平台的UI。
答案 3 :(得分:1)
如果您不介意一些手动工作,可以使用SpringLayout为标签添加约束。这允许您将边缘与其他边缘精确定位,默认情况下也会对组件大小进行排序(通过在铺设时基本上将边缘设置为相隔一段距离)我在下面使用textArea进行了演示,但可以轻松应用也是你的标签。
public class SO {
public static void main(String[] args) {
//Components
JFrame frame = new JFrame();
JPanel panel = new JPanel();
panel.setSize(frame.getSize());
JTextArea text = new JTextArea();
//Add components
panel.add(text);
frame.add(panel);
//Layout add & setup
SpringLayout layout = new SpringLayout();
panel.setLayout(layout);
layout.putConstraint(SpringLayout.WEST, text, 10, SpringLayout.WEST, panel);
layout.putConstraint(SpringLayout.NORTH, text, 10, SpringLayout.NORTH, panel);
layout.putConstraint(SpringLayout.EAST, text, -10, SpringLayout.EAST, panel);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
frame.pack();
frame.setVisible(true);
}
}