使用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();
}
}
答案 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();
}
}