【问题标题】:How do I stop the position of JLabels changing inside a JPanel whenever I change the text of other JLabels in the same JPanel?每当我在同一个 JPanel 中更改其他 JLabel 的文本时,如何停止 JLabels 在 JPanel 内的位置变化?
【发布时间】:2017-06-06 18:51:09
【问题描述】:

我在一个 JPanel 中有多个 JLabel。每当我将文本更改为一个时,都会导致 JPanel 内的其他 JLabel 移动。如何将它们锁定到位?

【问题讨论】:

  • 欢迎来到 Stack Overflow,因为您的问题尚不清楚,minimal reproducible example 可能会澄清您的意思。但是我看到你还没有使用tour,所以通过它并学习How to Ask,然后通过edit发送你的问题来发布MCVE的代码。这将导致更少的混乱和更多更好的答案,如果您不遵循上述建议,您的问题可能会被关闭和/或删除,并且您将被禁止在本网站提出新问题
  • 除了@Frakcool 建议的 MCVE 之外,提供 ASCII 艺术或 GUI 的 预期 布局的简单绘图,最小尺寸,如果可调整大小,则具有更大的宽度和高度。

标签: java swing


【解决方案1】:

该方法实际上取决于标签的定位方式以及您使用的 LayoutManager。

默认情况下,JLabel 将主要根据标签文本和字体大小来计算其大小。如果您要更改文本,则 JLabel 大小也会更改,从而使布局管理器重新定位其他标签。

这是一个使用 FlowLayout 并硬设置 JLabel 首选大小的示例,以便在其文本更改时不会更改。其他布局管理器可能会选择忽略首选尺寸:

    JFrame frame = new JFrame();
    frame.getContentPane().setLayout( new FlowLayout() );

    JLabel l = new JLabel("text1");
    l.setPreferredSize( new Dimension( 50, (int)l.getPreferredSize().getHeight() ) );
    frame.getContentPane().add(l);

    frame.getContentPane().add( new JLabel("text2") );
    frame.getContentPane().add( new JLabel("text3") );

如果您在此处更改 l 的文本,它不会移动其他 2 个标签。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-19
  • 2017-11-25
  • 1970-01-01
  • 1970-01-01
  • 2014-06-13
  • 1970-01-01
相关资源
最近更新 更多