将JLabel定位在面板的中心,将JLabel定位在同一面板的右侧

时间:2015-12-03 15:24:32

标签: java swing layout jpanel alignment

我有一个JPanel,里面有两个JLabel个组件:headerLabeltimeLabel

问题在于我无法让headerLabel坐在面板的中央,timeLabel坐在最右边。我尝试了几种不同的布局管理器(GridBagLayoutBorderLayout等)和技术(Box.createHorizontalStrut(X),添加了Insets),他们最终都推了headerLabel在最左边和timeLabel到最右边或将它们放在中间。

下面是我希望它看起来的图形表示:

http://i67.tinypic.com/2mowf9l.png

我应该使用特定的布局管理器来获得此结果吗?

2 个答案:

答案 0 :(得分:4)

  

我尝试了几种不同的布局管理器(GridBagLayout,BorderLayout等)

好吧,发布你的代码。我们无法猜测你可能在做什么。

我会使用BorderLayout.CENTER

BorderLayouyt.LINE_END添加一个标签,向setLayout( new BorderLayout() ): JLabel center = new JLabel("CENTER"); center.setHorizontalAlignment(JLabel.CENTER); // maybe you are missing this add(center, BorderLayout.CENTER); JLabel right = new JLabel("RIGHT"); add(right, BorderLayout.LINE_END); 添加另一个标签。

/S

当有额外的水平空间时,告诉文本如何对齐自己。

答案 1 :(得分:1)

你应该可以使用GridBagLayout到达那里。

headerPanel将位于0,0,其中FILL_BOTH,居中且fillx = 1.0

timePanel将位于0,1并且没有其他填充选项。

现在,这些显示器在很大程度上取决于渲染原始面板的大小。如果它位于JDialog或任何其他pack()编辑的容器中,它们仍然会出现并且#34;并排#34;因为这是布置这些元素的最佳方式。

如果这还有问题,你可以指定最小值和最小值。 headerPanel的首选大小,以便打包不会将其缩小到该大小以下。

    GridBagLayout gridBagLayout = new GridBagLayout();
    gridBagLayout.columnWidths = new int[]{0, 0, 0};
    gridBagLayout.rowHeights = new int[]{0, 0};
    gridBagLayout.columnWeights = new double[]{1.0, 0.0, Double.MIN_VALUE};
    gridBagLayout.rowWeights = new double[]{0.0, Double.MIN_VALUE};
    setLayout(gridBagLayout);

    JLabel lblHeader = new JLabel("HEADER");
    GridBagConstraints gbc_lblHeader = new GridBagConstraints();
    gbc_lblHeader.weightx = 1.0;
    gbc_lblHeader.insets = new Insets(0, 0, 0, 5);
    gbc_lblHeader.gridx = 0;
    gbc_lblHeader.gridy = 0;
    add(lblHeader, gbc_lblHeader);

    JLabel lblTime = new JLabel("TIME");
    GridBagConstraints gbc_lblTime = new GridBagConstraints();
    gbc_lblTime.gridx = 1;
    gbc_lblTime.gridy = 0;
    add(lblTime, gbc_lblTime);