2012-07-17 79 views
1

我在使用MigLayout並動態更改MigLayout單元格中顯示的組件的字體大小時遇到​​問題。MigLayout行高並更改字體大小

詳細說明:我通過MigLayout添加了一個JCheckBox到一個JPanel。 JCheckBox的字體大小是默認的(12pt?),包含JCheckBox的行的首選高度爲17lp。這一切都很好。 (這裏查看:http://www.bilderload.com/bild/227327/migproblemcellheight1UQXP2.png

現在我改變字體大小爲例如20pt並再次啓動程序。現在JCheckBox的文本被剪切,因爲該行也具有17lp的高度。如果我例如讓行定義爲空(「[]」),則文本在兩種字體大小(正常大小和大大小字體大小)下正確顯示。但在這種情況下,該行將永遠達不到最低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

您可以通過減小邊框大小減少周圍的複選框的空間,例如把

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

直接後testBox的分配。然後,您可以將行定義保留爲空,並且仍然爲您的面板獲得合理的高度。

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(); 
    } 
}