首页 > 解决方案 > 当包含内容的 Swing 组件调整大小时调整内容大小

问题描述

尝试学习 Java Swing 并有一个主要是概念性的问题:

我知道不建议对组件的大小进行硬编码,而是让 LayoutManagers 适当地调整组件的大小(例如,由于可调整大小的框架或不同屏幕上的不同分辨率)组件。

这似乎适用于组件,但是当涉及到组件的“内容”时,我感到很困惑,因为它们似乎不会根据组件的变化而改变它们的大小。

例子:对我来说

  1. 如果 JTextArea 增加,则 JTextArea 中的字体大小似乎不会增加(如在将文本保留在 JTextField 中时最大化字体大小中所讨论的)

  2. JButton 上 ImageIcon 的大小不会在 JButton 调整大小时调整(类似于调整 JButton 中 ImageIcon 的大小

让这些组件中的内容随它们的组件一起调整大小不是很自然吗(作为 Swing 中的标准选项)?

您的解决方案是否会在绘制组件时获取组件的大小,然后调整其内容的大小?

我尝试了 2.,扩展 JButton 并用类似这样的东西覆盖 getIcon() (正如我相信的链接中所建议的那样):

   @Override
   public Icon getIcon() {
       Icon icon=super.getIcon();
       if(icon instanceof ImageIcon)
       {
           Image image=((ImageIcon)icon).getImage();
           Image newimg = image.getScaledInstance(Math.max(this.getSize().width-10,1),Math.max(this.getSize().height-10,1), java.awt.Image.SCALE_SMOOTH);
           icon=new ImageIcon(newimg);
       }
       return icon;
   }

不管上述概念性问题如何,我也很感激有关这个具体示例的帮助。这种实现的一个问题似乎是,一旦 JButton 包含适当大小的图标,它的大小就不能再减小了。

对每种可能的组件和内容类型都这样做似乎很愚蠢。

标签: javaswingresize

解决方案


推荐阅读