在JFrame中控制组件

时间:2011-08-08 18:29:18

标签: java swing

我正在努力控制我的组件。我有一个包含JPanel的JFrame。我的组件如JLabel和JTextArea被添加到此Panel中。所以我的问题是:

如何控制这些组件?我尝试过使用

GridBagConstraints constraints = new GridBagConstraints(); constraints.gridx = 1;

但它似乎不起作用..

这是我的函数初始化我的GUI:

public void initGUI()
{

    Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();  

    final JFrame frame = new JFrame("instantINFO!");
                 frame.setSize(screenSize.width, screenSize.height); 
                 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                 frame.setLayout(new GridBagLayout()); 

    final JPanel panel = new JPanel();

    weather = new JTextArea(vær, 6, 20);
    weather.setFont(new Font("Arial", Font.BOLD, 16));
    weather.setLineWrap(true);
    weather.setWrapStyleWord(true);
    weather.setOpaque(false);
    weather.setEditable(false);

    stedLabel = new JLabel(sted);
    dagLabel = new JLabel(dag);

    panel.add(weather);
    panel.add(stedLabel); 
    panel.add(dagLabel); 

    frame.add(panel);
    frame.setVisible(true);

}

例如,我希望天气标签位于左上角,边距为几个像素。

3 个答案:

答案 0 :(得分:4)

默认情况下,JPanel使用FlowLayout。默认情况下,组件在面板上的一行中居中。如果您希望组件保持对齐,则需要更改流布局以使组件对齐。阅读FlowLayout API以了解如何执行此操作。

我还建议您查看Using Layout Managers上的Swing教程以获取工作示例。

答案 1 :(得分:2)

您应该学习Layout Managers来控制您的组件布局

  

例如,我希望天气标签位于左上角,   带有几个像素的边距。

要按像素控制组件位置,可以使用setLocation()方法,但是您应该设置绝对布局或者只需将组件布局设置为null,这将支持x,y位置控制

一样的代码
aPanel.setLayout(null);
...
aButton.setLocation(10,3);
aPanel.add(aButton);

我喜欢绝对位置控制的例子,所以我想分享它example观看它以观察概念

祝你好运:)

答案 2 :(得分:1)

正如其他提到的答案,你应该学习布局管理员。您可以使用java IDE GUI设计器为您完成此工作。您可以使用netbeans has a Swing GUI builder通过拖放来构建组件。

最新的eclipse Indigo版本现在提供了一个不错的WindowBuilder工具。