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 のサイズに合わせたくありません。コンテナに余分な垂直スペースがある場合は、空のままにしておきます。