JComponent 大小与屏幕大小无关
Posted
技术标签:
【中文标题】JComponent 大小与屏幕大小无关【英文标题】:JComponent size independent from screen size 【发布时间】:2015-08-07 18:39:04 【问题描述】:我的应用程序包含丰富的 JPanel 和其他显示某些内容的 Swing 组件。我希望这些 JComponents 的尺寸独立于屏幕尺寸,例如我的 GUI 在不同的分辨率下都可以。我想在我的代码中做这样的事情
public class myPanel extends JPanel
//constructors and other useful methods
@Override
public Dimension getPreferredSize()
Dimension screen_size=Toolkit.getDefaultToolkit().getScreenSize();
return new Dimension (0.50*screen_size.width, 0.30*screen_size.height);
简而言之,以屏幕尺寸的百分比为 JPanel 提供尺寸。这样好吗?没有快速的方法吗?因为我应该对我使用的每个 JComponent 都这样做。我该怎么办? PS:假设我使用了符合首选尺寸的管理器布局。
【问题讨论】:
您的解决方案有什么问题? “快”是什么意思——执行时间短还是编码时间短? AFAIK 的首选方式是使用布局管理器并让他们决定组件的大小。屏幕大小只会影响窗口大小,布局管理器会将其传播到所有组件。如果您无法使用内置布局管理器执行您想要的操作,请查看 MigLayout 等第三方库,您可以在其中定义面板以占据 50% 的窗口宽度和 30% 的高度。跨度> 【参考方案1】:布局GridBagLayout
允许您将大小指定为列的权重。如果您这样做并指定所有组件来填充其网格单元格,那么您将获得所需的行为。
例如 3 个组件:
weightx 2, weightx 1, weightx 1
那么第一个组件将始终使用 50% 的窗口,接下来的两个各 25% 的窗口。这也会在您调整窗口大小时自动调整大小,而不仅仅是显示器。
您应该知道,控件内的文本等内容不会随控件自动调整大小。
见:https://docs.oracle.com/javase/tutorial/uiswing/layout/gridbag.html
【讨论】:
以上是关于JComponent 大小与屏幕大小无关的主要内容,如果未能解决你的问题,请参考以下文章
Android 屏幕适配屏幕适配基础概念 ③ ( 屏幕像素密度 DPI 与素材大小关联 | 屏幕像素密度 DPI 与 屏幕密度限定符关联 )
Android 屏幕适配屏幕适配基础概念 ③ ( 屏幕像素密度 DPI 与素材大小关联 | 屏幕像素密度 DPI 与 屏幕密度限定符关联 )