2

我在将 MigLayout 与动态更改 MigLayout 单元格中显示的组件的字体大小结合使用时遇到问题。

详细说明:我通过 MigLayout 向 JPanel 添加了一个 JCheckBox。JCheckBox 的字体大小为默认值(12pt?),包含 JCheckBox 的行的首选高度为 17lp。这一切都很好。(在这里查看:http: //www.bilderload.com/bild/227327/migproblemcellheight1UQXP2.png

现在我将字体大小更改为例如 20pt 并再次启动程序。现在 JCheckBox 的文本被剪切,因为该行的高度也为 17lp。(在这里查看:http: //www.bilderload.com/bild/227328/migproblemcellheight2DDPGJ.png

例如,如果我让行定义为空(“[]”),则文本以两种字体大小正确显示 - 正常和大字体。但在这种情况下,遗憾的是,该行永远不会达到最低 17lp。(它总是至少有 23lp 左右)

如何更改 MigLayout 定义以获得 17lp 的最小行高并让单元格与组件字体大小/文本等一起正确增长?或者也许这是一个 L&F 问题?

谢谢和最好的问候,

菲利普

这是我的示例代码(工作示例):

import java.awt.Font;

import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JPanel;

import net.miginfocom.swing.MigLayout;

public class TestMigLayoutFontSize extends JFrame {
  public TestMigLayoutFontSize() {
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    setSize(600, 400);
    setContentPane(getTestPanel());
    setVisible(true);
  }

  private JPanel getTestPanel() {
    JCheckBox testBox = new JCheckBox("Program argument");
    Font normalFont = testBox.getFont();
    Font largeFont = new Font(testBox.getFont().getName(), testBox.getFont().getStyle(), 20);
    // testBox.setFont(normalFont);
    testBox.setFont(largeFont);

    JPanel tempPanel = new JPanel(new MigLayout("debug", "0lp![grow,fill]0lp!", "[17lp:17lp:n]"));
    tempPanel.add(testBox);

    JPanel testPanel = new JPanel(new MigLayout("", "[grow,fill]", "[grow,fill]"));
    testPanel.add(tempPanel);

    return testPanel;
  }

  public static void main(String[] args) {
    new TestMigLayoutFontSize();
  }
}
4

2 回答 2

2

您可以通过减小边框大小来减少复选框周围的空间,例如 put

testBox.setBorder(BorderFactory.createEmptyBorder(1, 1, 1, 1));

分配后直接testBox。然后,您可以将行定义留空,并且仍然可以获得面板的合理高度。

于 2012-07-17T11:46:35.953 回答
0

以下对我有用。我认为问题在于,您指定了首选尺寸。

问候罗杰

package de.test;

import java.awt.Font;

import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JPanel;

import net.miginfocom.swing.MigLayout;

public class MigTest extends JFrame {
  public MigTest() {
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    setSize(600, 400);
    setContentPane(getTestPanel());
    setVisible(true);
  }

  private JPanel getTestPanel() {
    JCheckBox testBox = new JCheckBox("Program argument");
    Font normalFont = testBox.getFont();
    Font largeFont = new Font(testBox.getFont().getName(), testBox.getFont().getStyle(), 90);
    // testBox.setFont(normalFont);
    testBox.setFont(largeFont);

    JPanel tempPanel = new JPanel(new MigLayout("debug", "0lp![grow,fill]0lp!", "[80:n:]"));
    tempPanel.add(testBox);

    JPanel testPanel = new JPanel(new MigLayout("", "[grow,fill]", "[grow,fill]"));
    testPanel.add(tempPanel);

    return testPanel;
  }

  public static void main(String[] args) {
    new MigTest();
  }
}
于 2012-07-17T14:33:34.247 回答