【问题标题】:add JPanel to right or left into JPanel将 JPanel 添加到 JPanel 的右侧或左侧
【发布时间】:2016-05-24 10:04:49
【问题描述】:

我使用 java swing 我已经尝试过一些布局,但它们没有用。 我有一个包含一些面板的 mainPanel,或者在右侧或左侧 ,明显低于其他。

有人知道怎么做吗? 谢谢大家

【问题讨论】:

  • 网格或网格包布局...网格:所有单元格具有相同的尺寸,一个单元格中有一个孩子,每个单元格最多一个孩子。 gridbag:稍微复杂一些。使用 2x2 网格,一个面板位于 (1,0),另一个位于 (0,1)。
  • 但是窗格的数量是不确定的,可以是14或100
  • 那么在你知道窗格数量的时候相应地创建一个gridlayout,有什么问题?
  • 它是一个聊天应用,我不知道消息的数量:)
  • 嘿,现在您开始向我们提供有关您的需求的一些有用信息...诀窍是您还需要一些滚动...使用带有使用网格布局的面板的滚动窗格,然后更改当你需要gridlayout时,你可以从100行开始(不要担心结束行没有使用,当它增长时构建另一个gridlayout......但我认为你需要创建自己的布局/组件来处理这些更恰当...

标签: java swing


【解决方案1】:

这是一个聊天应用,

如果您只是在面板中显示文本,则可以使用带有右/左对齐文本的 JTextPane,如下所示:Java Swing JTextArea write both left and right

或者您可以使用GridBagLayout,每列一个组件。然后你需要使用:

  1. 每个组件上的fill 约束,以便填充行中可用的宽度。
  2. 那么对于每个组件,您将使用anchor 约束,因此该组件位于LINE_START 或LINE_END 上。

阅读 Using a GridBagLayout 上的 Swing 教程中的部分,了解有关每个约束的更多信息。

或者,您可以使用Relative Layout,它还允许面板的垂直布局。在这种情况下,代码将类似于:

RelativeLayout rl = new RelativeLayout(RelativeLayout.Y_AXIS);
rl.setFill(true);
setLayout( rl );

JPanel left = new JPanel(new FlowLayout(FlowLayout.LEFT) );
left.add(new JLabel("left"));
add(left);

JPanel right = new JPanel(new FlowLayout(FlowLayout.RIGHT));
right.add(new JLabel("right"));
add(right);

所以你只需要管理每个面板的FlowLayout的对齐方式。

【讨论】:

    猜你喜欢
    • 2012-01-24
    • 1970-01-01
    • 2019-08-05
    • 1970-01-01
    • 2013-07-04
    • 1970-01-01
    • 2019-12-28
    • 2020-06-24
    • 2017-12-28
    相关资源
    最近更新 更多