如何在JPanel上的某个点上定位某些东西



现在我有以下代码,它将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……那么你如何在面板中定位某个点呢?

使用适当的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)

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

但我建议您使用LayoutManager

如果您不介意一些手工工作,您可以使用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);        
    }
}

尽管不推荐,但如果将布局管理器设置为null,则可以进行绝对定位。

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

Oracle文档


我的建议是使用好的IDE+UI生成器组合,例如:

  • Netbeans GUI生成器
  • Eclipse WindowBuilder
  • IntelliJ GUI设计器

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

如果你想设计好的UI,布局管理器是必须的。它们不仅处理组件的大小和定位,还处理诸如在窗口调整大小时重新分配/重新定位/调整组件大小之类的事情(这真的很难用手)。此外,这些UI设计师可以提示您,以便您遵守指导方针和最佳实践,以便设计高质量/跨平台的UI。

相关内容

  • 没有找到相关文章

最新更新