0

JPanel で JCheckBox の縦型リストを表示したいと考えています。しかし、私は各 JCheckBox を JPanel でラップすることにしました (将来必要になると考えています)。BoxLayout を使用して、これらの JPanel (それぞれ 1 つの JCheckBox を含む) を別の JPanel に垂直にスタックします。

BoxLayout は、追加された JPanel 間に垂直方向のスペースがなくても、期待どおりに機能しています。私の問題は、個々のチェックボックスを含むこれらの内部 JPanels にあります。各パネルのチェックボックスの周りにはかなりのスペースがあります。これらのチェックボックスをしっかりとラップして、jcheckbox のサイズとそれらを含む対応する jpanel のサイズが等しくなるようにします。

これらの個々のjpanelについて、レイアウトを試しました-フローレイアウトとデフォルトレイアウト。どちらも役に立ちませんでした。

どうすればこれを修正できますか? 単純にフローレイアウトを設定し、jcheckbox を jpanel に直接追加するだけです。私が使用した他のコードはありません。

サンプルコードを追加しています: import java.awt.Color; java.awt.Dimension をインポートします。java.awt.FlowLayout をインポートします。

import javax.swing.BoxLayout;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.SwingUtilities;

public class TryBox  implements Runnable{

/**
 * @param args
 */
public static void main(String args[])
{
   SwingUtilities.invokeLater(new TryBox());
}
public void run()
{
    class InnerPanel extends JPanel
    {

        public InnerPanel(int i) {
            // TODO Auto-generated constructor stub
            setLayout(new FlowLayout());    

            setBackground(new Color(i*50, i*50, i*50));

            add(new JCheckBox("CheckBox "+i));

        }

    }
    JPanel outerPanel = new JPanel();
    outerPanel.setLayout(new BoxLayout(outerPanel, BoxLayout.Y_AXIS));

    for(int i=0;i<5;i++)
    {
        outerPanel.add(new InnerPanel(i));
    }
     JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JScrollPane sp = new JScrollPane(outerPanel);
        frame.setPreferredSize(new Dimension(200, 600));
        frame.getContentPane().add(new JScrollPane(outerPanel));
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
}

}

ここframe.setPreferredSize(new Dimension(200, 600));に違いがあります。jpanels を jcheckboxes のサイズに縮小したい。jcheckboxes を jpanel のサイズに合わせたくありません。コンテナに余分な垂直スペースがある場合は、空のままにしておきます。

4

2 に答える 2

2

のデフォルトのレイアウトはJPanelFlowLayout、デフォルトのコンストラクターは「デフォルトの 5 単位の水平方向と垂直方向のギャップ」を作成します。ギャップなしを指定できます。

JPanel panel = new JPanel(new FlowLayout(FlowLayout.CENTER, 0, 0));

さらに、L&F によって異なるJCheckBoxUI デリゲートが追加されます。Insetsこれらを変更することには慎重です。サイズはごくわずかであり、通常、選択の指示に対応するために必要です。

于 2013-10-09T15:01:02.623 に答える