SwingLayout を使用した Swing プログラムがあります。Swing コンポーネントの構造は次のようになります。
JFrame
JPanel (Cardlayout)
JPanel (Miglayout) - Main panel
Jpanel (Flowlayout) - Checkbox Panel
JPanel (Flowlayout) - Option Panel
私の問題は、チェックボックスパネルが大きくなるのを防ぐ方法がわからないことです。右側にある列を「押し出す」ことはしたくありません。チェックボックス パネルが大きくなりすぎた場合に、Wraplayout (オプション パネルで正常に動作) でそのコンテンツをラップするようにします。
これは、Eclipse 内の Windowsbuilder GUI からのビューです。「sites」というラベルが付いたパネルは、チェックボックス パネルです。チェックボックス パネルのすぐ右側にはオプション パネルがあります。両方を含む大きなパネルがメインパネルです。 http://i.imgur.com/S7Njo.png
チェックボックスを追加しすぎるとこうなります http://i.imgur.com/f2SZz.png
私の主な問題は、メインパネルの最初の列の列制約に「grow 0」を設定しても、サイトパネルに新しいチェックボックスを追加するときに内部のコンポーネントが大きくなりすぎたときに、列の制限が妨げられない理由がわからないことです(サイトパネルには、任意の数のチェックボックスを含めることができます)。
これは、メイン パネルのマイレイアウトです。
mainPanel.setLayout(new MigLayout("", "[][grow]", "[][][][][][][][grow]"));
チェックボックスパネルを追加するときのコンポーネントの制約は次のとおりです
siteCheckBoxPanel = new JPanel();
mainPanel.add(siteCheckBoxPanel, "cell 0 0,alignx left,gapx 0px,aligny center");
siteCheckBoxPanel.setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5));
また、フロー レイアウトなしで試してみましたが、何も修正されません。あなたが提供できる洞察は素晴らしいでしょう!また、質問がある場合は、喜んで詳しい情報を提供します。参考までに、チェックボックスパネルが内側にあるセルの列と行の両方の制約で「0 を成長」も試しました。
これがSSCCEです。以下のソースをつかむことができます。必要な唯一の依存関係は milayout です。ボタンをクリックして、チェックボックスを追加できます。
https://dl.dropbox.com/u/20614368/Test.java
import java.awt.CardLayout;
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.border.EmptyBorder;
import net.miginfocom.swing.MigLayout;
public class Test extends JFrame {
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
private Test frame;
public void run() {
try {
frame = new Test();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
private JPanel contentPane;
private JPanel mainPanel;
private JPanel optionPanel;
private JButton btnUploadImages;
private JLabel thumbnailLabel;
private JTextArea textArea;
private JPanel checkboxPanel;
private final Action action = new SwingAction();
/**
* Create the frame.
*/
public Test() {
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 1098, 846);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(new CardLayout(0, 0));
mainPanel = new JPanel();
mainPanel.setName("");
contentPane.add(mainPanel, "name_329556913535654");
mainPanel.setLayout(new MigLayout("", "[][grow]", "[][][][][][][][grow]"));
JLabel lblPicture = new JLabel("Picture");
mainPanel.add(lblPicture, "cell 0 1");
optionPanel = new JPanel();
optionPanel.setBackground(Color.red);
mainPanel.add(optionPanel, "cell 1 0 1 5,grow");
btnUploadImages = new JButton("Upload Images");
btnUploadImages.setAction(action);
thumbnailLabel = new JLabel("");
mainPanel.add(thumbnailLabel, "cell 0 4");
textArea = new JTextArea();
mainPanel.add(btnUploadImages, "cell 0 6");
checkboxPanel = new JPanel();
checkboxPanel.setBackground(Color.green);
mainPanel.add(checkboxPanel, "flowx,cell 0 0");
JLabel lblSites = new JLabel("Sites");
checkboxPanel.add(lblSites);
}
private class SwingAction extends AbstractAction {
public SwingAction() {
putValue(NAME, "Add checkbox");
putValue(SHORT_DESCRIPTION, "Some short description");
}
public void actionPerformed(ActionEvent e) {
JCheckBox box = new JCheckBox();
box.setName("Foobar!");
checkboxPanel.add(box);
contentPane.validate();
contentPane.repaint();
}
}
}