1

现在我有以下代码将 JLabel 添加到面板的顶部中心,我认为这是默认设置

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....那么你如何将某些东西定位到面板内的某个点?

4

4 回答 4

2

似乎您storePanelJPanel并且有默认FlowLayout管理器,因为您setBounds(20, 20, 50, 50);不起作用。它将与空布局 ( storePanel.setLayout(null);) 一起使用。

但我建议你使用LayoutManager.

于 2013-11-25T19:10:47.703 回答
2

使用适当的 LayoutManager 将组件放置在面板中。

http://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html

在您的情况下,您应该能够使用 aFlowLayout并在创建它时设置水平和垂直间隙。

http://docs.oracle.com/javase/7/docs/api/java/awt/FlowLayout.html#FlowLayout(int,%20int,%20int)

于 2013-11-25T19:08:57.620 回答
1

虽然不推荐,但如果您将布局管理器设置为null.

storePanel.setLayout(null);
// imageLabel initialization code
storePanel.add(imageLabel);
imageLabel.setBounds(20, 20, 50, 50);

甲骨文文档


我的建议是使用 Good IDE + UI Builder 组合,例如:

这些是所见即所得的工具,可以使用灵活的布局管理器(如Group LayoutJGoodies Form Layout )生成 Swing 代码。

如果你想设计好的 UI,布局管理器是必须的。它们不仅处理组件的大小和定位,还处理诸如在窗口调整大小时重新分配/重新定位/调整组件大小(这真的很难手动获得)。此外,那些 UI 设计师可以提示您,以便您坚持准则和最佳实践,以设计高质量/跨平台的 UI。

于 2013-11-25T19:10:38.473 回答
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);        
    }
}
于 2013-11-25T19:22:44.337 回答