2

MigLayoutセルに表示されるコンポーネントのフォントサイズを動的に変更することと組み合わせてMigLayoutを使用すると問題が発生します。

詳細:MigLayoutを介してJCheckBoxをJPanelに追加しました。JCheckBoxのフォントサイズはデフォルト(12pt?)であり、JCheckBoxを含む行の推奨高さは17lpです。それはすべてうまくいきます。(ここを表示:http://www.bilderload.com/bild/227327/migproblemcellheight1UQXP2.png

次に、フォントサイズをたとえば20ptに変更して、プログラムを再起動します。行の高さも17lpであるため、JCheckBoxのテキストが切り取られます。(ここを表示: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

境界線のサイズを小さくすることで、チェックボックスの周りのスペースを減らすことができます。

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 に答える