【问题标题】:JLabel text disappears in JPanel after resize调整大小后 JLabel 文本在 JPanel 中消失
【发布时间】:2012-01-12 13:49:03
【问题描述】:

我有两个渲染器。其中一个扩展了 JTextArea,另一个继承了 JPanel。我使用 GridBagLayout 将它们添加到另一个 JPanel。

当调整 JTextArea 大小时,我至少可以看到一些文本。如果是 JPanel,我有两个标签,如果 JPanel 太小,它们就会完全消失。

有没有办法让 JLabel 被调整大小而不是完全消失?


感谢您的回答!

为 JPanel 使用 BoxLayout 并指定最小、首选和最大尺寸解决了我的问题。

【问题讨论】:

  • 如需尽快获得更好的帮助,请附上sscce
  • “渲染器”是什么意思?真的是 XXCellRenderer,将面板作为渲染组件出售?如果不是,请不要使用这个词,你会让我感到困惑 ;-)
  • 我的意思是我有两个组件。其中之一是工作正常的 JTextArea,因为如果可以的话,它至少会显示一些文本。 JPanel 隐藏了整个 JLabel。这是否意味着我需要编写自己的代码来调整 JPanel 中每个组件的大小?
  • 我从未见过这个问题。 GridBagLayot 使用最小尺寸来帮助确定在没有足够空间以首选尺寸显示组件时如何缩小组件。 JLabel 的最小大小等于其首选大小,因此 JLabel 永远不会缩小大小。发布您的 SSCCE 来证明您的问题,也许有人可以提供帮助。

标签: java swing resize jpanel jlabel


【解决方案1】:

您是否尝试过使用框架的setMinimumSize(Dimension) 方法?

frame.setMinimumSize(new Dimension(100, 100));

查看documentation 告诉我,您看到的行为取决于平台,因此如果您有多个平台,最好测试每个平台上的代码;看看哪些有效,哪些无效。

以下示例代码可以在 Windows Vista 上根据需要为我工作:

import javax.swing.JFrame;
import java.awt.Dimension;

public class Ex extends JFrame {
    public static void main(String[] args) {
        JFrame frame = new JFrame("YOU CAN'T SHRINK ME COMPLETELY!");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(400, 400);
        frame.setMinimumSize(new Dimension(100, 100));
        frame.setVisible(true);
    }
}

【讨论】:

    【解决方案2】:

    检查面板的布局管理器。

    【讨论】:

    • 问题表明正在使用 GridBagLayout。
    • 他说外部面板使用 GridBagLayout,而不是包含标签的面板
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-30
    • 2021-06-24
    • 1970-01-01
    • 2011-06-12
    • 1970-01-01
    • 2013-10-09
    相关资源
    最近更新 更多