MigLayout行高和更改字体大小

时间:2012-07-17 11:31:10

标签: java swing user-interface miglayout

使用MigLayout并动态更改MigLayout单元格中显示的组件的字体大小时出现问题。

详细说明:我通过MigLayout将JCheckBox添加到JPanel。 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并让单元格使用组件font-size / text等正确生长? 或者这可能是一个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();
  }
}

2 个答案:

答案 0 :(得分:2)

您可以通过缩小边框大小来缩小复选框周围的空间,例如:放

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

分配testBox后直接

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

答案 1 :(得分: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();
  }
}