- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有以下场景 - 我有一个面板,其中在另一个面板中包含一个组件(在本例中为标签) - 全部使用 MigLayout
定义。
当调整面板大小时,我想调整JLabel
的字体大小以适合整个区域。
我将代码精简到最低限度
public class TestClass {
private JPanel panel;
private JLabel displayLabel;
private TestClass() {
panel = new JPanel(new MigLayout(new LC().fill().gridGap("0", "0").insetsAll("0").hideMode(3)));
displayLabel = new JLabel("some text goes here");
displayLabel.setFont(new Font("Dialog", Font.BOLD, 9));
panel.add(displayLabel, new CC().grow().push());
panel.addComponentListener(new ComponentAdapter() {
@Override
public void componentResized(ComponentEvent e) {
scale(displayLabel);
}
});
}
private void scale(JLabel component) {
Integer lastWidth = (Integer) component.getClientProperty("width");
Integer lastHeight = (Integer) component.getClientProperty("height");
if (lastWidth != null && lastHeight != null && lastWidth == component.getWidth() && lastHeight == component.getHeight()) {
return;
}
component.putClientProperty("width", component.getWidth());
component.putClientProperty("height", component.getHeight());
int minFontSize = 9;
Font oldFont = component.getFont();
float size = oldFont.getSize();
Font newFont = oldFont.deriveFont(size);
FontMetrics fm = component.getFontMetrics(newFont);
int availWidth = component.getWidth() - 2;
int availHeight = component.getHeight() - 2;
boolean found = false;
boolean increased = false;
boolean decreased = false;
while (!found) {
int stringWidth = fm.stringWidth(component.getText());
int stringHeight = fm.getHeight();
if (!decreased && stringWidth < availWidth && stringHeight < availHeight) {
size++;
increased = true;
} else if (stringWidth > availWidth || stringHeight > availHeight) {
size--;
decreased = true;
} else {
found = true;
}
if (increased && decreased) {
found = true;
}
newFont = oldFont.deriveFont(size);
fm = component.getFontMetrics(newFont);
}
if (size < minFontSize) {
size = minFontSize;
newFont = oldFont.deriveFont(size);
}
component.setFont(newFont);
}
public JPanel getPanel() {
return panel;
}
public static void main(String[] args) {
JFrame frame = new JFrame("");
JPanel pnl = new JPanel(new MigLayout(new LC().fill()));
pnl.add(new TestClass().getPanel(), new CC().grow().push());
frame.add(pnl, BorderLayout.CENTER);
frame.setSize(1024, 700);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}
当我通过拖动右边缘来放大它来调整框架大小时 - 它工作得很好,但是,当我尝试通过拖动右边缘的左侧来减小其大小时,应用程序变得缓慢并且结果没有反射(reflect)出来立即在 GUI 中。请运行它以了解我的意思。
您知道如何改进此代码以便顺利工作吗?
更新:我添加了一些日志记录,并且我观察到,当增加宽度时,它工作得很好,但是当减少面板的宽度时,我看到 componentResized() 方法被调用了很多与放大时相比,次数更多。
问题的原因似乎是MigLayout与grow()的结合。我已经用 BorderLayout 替换了所有布局,并且似乎工作正常。
但是,就我而言,我确实无法做到这一点,因为我需要面板在布局中增长。
最佳答案
我不确定为什么,但似乎为 JLabel 设置最小尺寸可以解决问题。
private TestClass() {
panel = new JPanel(new MigLayout(new LC().fill().gridGap("0", "0").insetsAll("0").hideMode(3)));
displayLabel = new JLabel("some text goes here");
displayLabel.setFont(new Font("Dialog", Font.BOLD, 9));
displayLabel.setMinimumSize(new Dimension(30, 10));
panel.add(displayLabel, new CC().grow().push());
panel.addComponentListener(new ComponentAdapter() {
@Override
public void componentResized(ComponentEvent e) {
scale(displayLabel);
}
});
}
关于java - MigLayout - componentResized() 调用次数过多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56240770/
右侧面板包含所有按钮,我想与底部对齐。 JPanel easternDock = new JPanel(new MigLayout("", "")); easternDock.add(button1,
任何人都可以建议我在哪里可以获得 Miglayout 站点中回调停靠演示应用程序的源代码。这样的教程也可以。谢谢。 最佳答案 有很多断开的链接指向以前的源代码所在的位置。现在演示与 MiG Layou
这里有点不对劲。我试图让最右边的按钮(在下面的示例中标记为“帮助”)与 JFrame 右对齐,并将巨大的按钮的宽度与 JFrame 绑定(bind),但每个按钮至少为 180px。我得到了巨大的按钮约
我正在尝试使结构整齐地居中,但标签和字段之间没有相等的空间,我想我可能不得不使用两列而不是合并它们。 这就是我想要实现的目标: +-----------------------------------
我是新来的,所以对我放宽点。我已经研究了所有关于 miglayout 的文档(顺便说一句,这非常好),但我似乎无法正确显示我想要的网格。 我需要 MigLayout() 参数来设置网格: 2 行,因为
我正在使用 Miglayout 为我的一个面板创建类似表格的布局。我需要所有面板的固定宽度为 200 像素。当我在面板中添加组件时,一切正常,但是当我尝试插入一个具有长文本的按钮(因此需要超过 200
我对 MigLayout 有一些奇怪的行为。我有一个 SSCCE 反射(reflect)了我的问题。基本上,顶部两个面板之间有一个间隙(该间隙属于左侧单元格)。其他一切都如我所愿。仅当 JFrame
我拥有的代码: JPANEL JPanel dadosdaparte = new JPanel(new MigLayout("fillx")); 添加到JPANEL dadosdapa
我有这个面板,它使用 MigLayout 为我的内容创建单元格。这是代码部分: / ====Layout==== setLayout(new MigLayout("hidemode 3
所以我有一个无法解决的问题,我希望我的 GUI 应用程序分为 3 个 JPanel(左、中、右)。我希望左面板和右面板具有固定尺寸,并且中心是流动的。这意味着侧面板仅在 JFrame 展开时垂直展开,
这个问题不太可能对任何 future 的访客有帮助;它只与一个较小的地理区域、一个特定的时间点或一个非常狭窄的情况相关,通常不适用于全世界的互联网受众。如需帮助使此问题更广泛适用,visit the
我有一个扩展类 JComponent 的类,我在其中创建一个带有数字的组件。我想使用 MigLayout 在框架中添加此类对象,但组件没有添加,我只能看到空框架。感谢您的帮助。 用图形创建组件的类 p
我有一个问题想问那些熟悉 MigLayout 或基本 Swing 使用方法的人。 我正在尝试为游戏创建服务器浏览器。 布局最终将如下所示。另外,老实说我不知道该使用什么布局管理器。 +------
我想要发生的是东部和南部的 jetty 移动到窗口的边缘,中间的两个单元填充所有其他空间。相反, jetty 是静态的,拉伸(stretch)窗口只会产生空白空间。 setLayout(new
我正在编写一个应用程序,我希望在其中具有此布局 45% 35% 10% ---------------------
我刚刚开始使用 MigLayout。 我阅读了一些文档,包括 MigLayout 的快速入门指南,并搜索了一些 SO 问题,但没有找到答案。我确信这是显而易见的,但就像我说的,这是我第一次使用这个布局
代码如下: ScreenHeight = Toolkit.getDefaultToolkit().getScreenSize().height, ScreenWidth = Toolkit.getDe
我正在尝试利用 MigLayout 布局管理器创建一个 GUI,允许用户将项目从一个列表移动到另一个列表。我需要箭头靠在一起(垂直)。我遇到的问题是顶部箭头位于单元格的顶部,但我未能成功将其向下移动到
我正在尝试将一个 JTabbedPane 添加到一个面板,上面有用于控件的按钮。我正在使用 MigLayout。 但是,我无法让 JTabbedPane 在按钮不需要时也填充的情况下填充。 参加以下
我目前面临的问题是,有 2 行,MigLayout 似乎强制两个第一个单元格具有相同的宽度,而我希望它们独立工作(注意“Filter”标签太长) ): 除了将两行定义为两个不同的 MigLayout
我是一名优秀的程序员,十分优秀!