java - 当包含内容的 Swing 组件调整大小时调整内容大小
问题描述
尝试学习 Java Swing 并有一个主要是概念性的问题:
我知道不建议对组件的大小进行硬编码,而是让 LayoutManagers 适当地调整组件的大小(例如,由于可调整大小的框架或不同屏幕上的不同分辨率)组件。
这似乎适用于组件,但是当涉及到组件的“内容”时,我感到很困惑,因为它们似乎不会根据组件的变化而改变它们的大小。
例子:对我来说
如果 JTextArea 增加,则 JTextArea 中的字体大小似乎不会增加(如在将文本保留在 JTextField 中时最大化字体大小中所讨论的)
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 包含适当大小的图标,它的大小就不能再减小了。
对每种可能的组件和内容类型都这样做似乎很愚蠢。
解决方案
推荐阅读
- dataframe - PySpark - DataFrame.count()是否会导致缓存()?
- python - 我在文件中列出了文件名,并希望逐行读取文件的内容。下面的代码将文件名本身视为一个列表
- c# - 从其他应用程序进入时应用程序没有获得键盘焦点
- vb.net - Visual Studio 2019 VB 在调试模式下运行代码突然变慢
- mysql - 查找在某个经理手下工作的所有人员 (SQL)
- python - Django 编辑行而不是添加新行
- oracle - 仅具有列名的Oracle检查约束?
- python - 从同一张excel表格上的多个表中制作单独的pandas dfs
- mysql - 警告:选项 --database 已被使用
- c++ - 程序在第二遍时不接受其他文件名