3

JList に JButton を追加して、ボード ゲームのようにします。

これが私のコードです:

public class Board {

public Board() {
    JList list = new JList();
    list.setLayout(new GridLayout(10, 10));
    list.setDragEnabled(true);

    Container container = new Container();
    JFrame frame = new JFrame();
    JPanel panel1 = new JPanel();
    JPanel panel2 = new JPanel();
    frame.add(container);
    container.add(panel1);

    for (int j = 0; j < 99; j++) {
        list.add(createButton());
    }

    panel2.add(list);
    container.add(panel2);
    panel2.setLayout(new GridLayout());
    panel1.setBounds(50, 150, 150, 150);
    panel1.setBackground(Color.YELLOW);
    panel2.setBounds(650, 150, 500, 500);
    panel2.setBackground(Color.RED);

    frame.setSize(1366, 768);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);
}

public JButton createButton() {
    JButton button = new JButton();
    button.setBackground(Color.BLUE);
    return button;
}
}

100回繰り返すと、次のようになります。ここに画像の説明を入力

99 回繰り返すと、次のようになります。

ここに画像の説明を入力

だから私の質問は、どうすれば上記のボードを埋めることができますか?

4

2 に答える 2

4

これが発生する理由は、すべてのボタンを JList に追加しているためです。これは、JList を実際に使用する方法ではありません (通常、リストからアイテムを追加/削除するために、リストをサポートするモデルを変更します) )。リストは、最初のスロットを占有する何かを内部的に実行しています。

この行を変更した場合:

JList list = new JList();

に:

JPanel list = new JPanel();

レイアウトは機能します (行も削除し、setDragEnabled99 を 100 に変更する必要があります)。必要な JList の機能があるかどうかはわかりませんが、それがレイアウトが正しく機能していない理由です。

于 2013-03-28T23:54:02.110 に答える
2

JList を作成する必要があります。

DefaultListModel dataModel = new DefaultListModel();
JList list = new JList(dataModel);
list.setLayoutOrientation(JList.HORIZONTAL_WRAP);

次のように ListCellRenderer を設定します。

 final JButton button = createButton();
    list.setCellRenderer(new ListCellRenderer() {
             @Override
             public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
                  return button;
             }
    });

次のようにアイテムを追加します。 // 追加する値は関係ありません。アイテムをレンダリングするときに必要な情報を決定します。

    for (int j = 0; j < 99; j++) {
        dataModel.add(j, j); 
    }

これを使用した例:カスタム JList を作成する方法

編集: その他の便利な参照: ドラッグ アンド ドロップ JList 内でドラッグ アンド ドロップ

于 2013-03-29T00:15:33.413 に答える