【问题标题】:Java GUI - PositioningJava GUI - 定位
【发布时间】:2013-11-16 16:17:12
【问题描述】:

我正在尝试将两个按钮放置在左上侧。不过,它们始终位于中心顶部。

我试过这个:

jp = new JPanel();
jp.setLayout(new GridBagLayout());

GridBagConstraints c = new GridBagConstraints();

//c.anchor = GridBagConstraints.BASELINE_TRAILING;
c.anchor = GridBagConstraints.WEST;

c.gridx = 0;
c.gridy = 0;
jp.add(test, c);
c.gridy++;
jp.add(atest, c);
add(jp);

但它仍然在中间,而不是在左侧 (http://i.imgur.com/MYF8dqr.png)。

这是我拍的。红色是我希望按钮的样子。


更新:

 ArrayList<String> atest = new ArrayList<String>();
    JLabel[ ] asd = new JLabel[100];

    int temp = 0;



GridBagConstraints c = new GridBagConstraints();
c.anchor = GridBagConstraints.FIRST_LINE_START;
c.weightx = 1.0;
c.weighty = 1.0;
c.gridx = 0;
c.gridy = 0;
atest.add("Hello");
atest.add("haelp");
atest.add("yummy");
atest.add("whats wrong");

for(String server : servers)
{
    asd[temp] = new JLabel();
    asd[temp].setText(server);
    jp.add(asd[temp], c);
    c.weighty++;
    c.gridy++;
    temp++;

}

我试图从数组中读取字符串并将其作为标签一个接一个地添加到左侧。 效果不太好,结果如下: http://prntscr.com/26a9rb 如果 gridbaglayout 是不好的方式,我应该选择哪种方式?

【问题讨论】:

  • 你可以试试其他布局
  • @HussainAkhtarWahid 哪一个最适合这个?

标签: java swing user-interface layout-manager gridbaglayout


【解决方案1】:

阅读 How to Use GridBagLayout 上的 Swing 教程中的部分,了解约束如何工作。 weightx, weighty 上的部分应该可以解决您的问题。

【讨论】:

  • 我认为他也应该更改锚以实现他所需的布局:)
  • 我现在明白了:prntscr.com/26a1mm 我用这个:GridBagConstraints c = new GridBagConstraints(); c.anchor = GridBagConstraints.FIRST_LINE_START;我已将 weightx/y 设置为 1.0,然后将 gridx/y 设置为 0。对于每个标签,我将 1 添加到 gridy,并且使用 weighty 我尝试添加 none、1、10000,但它不会一个接一个地排列。任何的想法? @Sage
  • @HowdoIeditmydisplayname,如果你想要一个像组件列表这样的布局,其中每个组件将一个接一个地出现,我认为 GridBagLayout 实际上不会完成这项工作。请使用您当前的代码更新您的问题,并尝试将图像与当前视图链接,以便我们理解。
  • @HowdoIeditmydisplayname,您可以使用BoxLayout 查看我上面的答案。
【解决方案2】:

如果您使用的是 Eclipse,则可以使用名为 WindowBuilder 的插件来构建框架:

http://www.eclipse.org/windowbuilder/

您必须在 WindowBuilder 中将 spring 布局应用到您的窗口,以便从工具栏中拖放按钮,就像在 VisualStudio 中的 .NET 设计器中一样。

【讨论】:

    【解决方案3】:

    解决您的问题:

    1. GridBagConstraintweightxweighty 设置为@camickr 提到的0 以外的其他值。

    2. 您应该将anchor 设置为FIRST_LINE_STARTWEST 锚点会将组件放在其显示区域的左侧,但组件将垂直居中。它相当于LINE_START,用于组件的水平、从左到右方向

    编辑:

    尝试查看BoxLayout。使用带有对齐设置的 Cleaver 使用 preferredSize 可以达到您的预期。我已经为你写了一个 SSCCE。但是,阅读size behavior with BoxLayout 将帮助您更好地理解该示例。

    class AComponent extends JPanel
    {
    
        public AComponent(Color c) {
    
            setBackground(c);
            setAlignmentX(LEFT_ALIGNMENT);
        }
    
    
        @Override
        public Dimension getPreferredSize() {
    
            return new Dimension(200,  100);
    
        }
    
        @Override
        public Dimension getMinimumSize() {
            return new Dimension(getPreferredSize());
        }
    
        @Override
        public Dimension getMaximumSize() {
            Dimension dim = getPreferredSize();
            return new Dimension(200, dim.height);
        }
    
    }
    
    
    
    class MyWindow extends JFrame
    {
    
        public MyWindow ()
        {
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            JPanel container = new JPanel()
            {
                @Override
                public Dimension getPreferredSize() {
                    return new Dimension(300, 350);
                    }
            };
    
            container.setLayout(new BoxLayout(container, BoxLayout.Y_AXIS));
            container.setBackground(Color.WHITE);
    
            container.add(new AComponent(new Color(0xFFAA00)));
            container.add(new AComponent(new Color(0x359DBD)));
            container.add(new AComponent(new Color(0xFFD47E)));
    
            add(container);
    
            pack();
    
        }
    
        public static void main(String[] args)
        {
            SwingUtilities.invokeLater(new Runnable() {
    
                @Override
                public void run() {
                   new MyWindow().setVisible(true);
                }
            });
    
        }
    }
    

    【讨论】:

      【解决方案4】:

      你需要像这样设置 jp:jp.setLayout(null);

      【讨论】:

        猜你喜欢
        • 2012-09-27
        • 1970-01-01
        • 2012-06-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-26
        • 1970-01-01
        • 2014-03-31
        相关资源
        最近更新 更多