如何在DefaultListModel中添加JButton?

时间:2013-04-07 13:42:27

标签: java swing jlist listcellrenderer

我正在制作战舰游戏,我正试图想出一种方法来控制窗格中的按钮,这样我就可以拖放它们并使用默认列表模型跟踪它们的索引。如果我添加字符串或ImageIcons它工作正常,但有按钮,我得到了不同的东西。

这是我的代码:

public class ListModelExample extends JPanel {

  JList list;
  DefaultListModel model;
  int counter = 15;

  public ListModelExample() {
    setLayout(new BorderLayout());
    model = new DefaultListModel();
    list = new JList(model);
    JScrollPane pane = new JScrollPane(list);
    JButton addButton = new JButton("Add Element");
    JButton removeButton = new JButton("Remove Element");
    final JButton button = new JButton("button");

    for (int i = 0; i < 5; i++)
      model.addElement(button);

    addButton.addActionListener(new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent e) {
        model.addElement(button);
        counter++;    

      }
    });
    removeButton.addActionListener(new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent e) {
        if (model.getSize() > 0)
          model.removeElementAt(0);
      }
    });

    add(pane, BorderLayout.NORTH);
    add(addButton, BorderLayout.WEST);
    add(removeButton, BorderLayout.EAST);
  }

  public static void main(String s[]) {
    JFrame frame = new JFrame("List Model Example");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setContentPane(new ListModelExample());
    frame.setSize(260, 200);
    frame.setVisible(true);

  }
}

如果我添加按钮,我会得到这个结果:

Result of adding buttons in the pane

所以我的问题是:如何使按钮正常显示而不是默认列表模型中的文字?

1 个答案:

答案 0 :(得分:3)

  • 这只能由Renderer完成,仅String <{1}}

  • 不要将任何DefaultListModel添加到JComponents

  • 我将XxxModelJPanel代替JButtons作为容器(需要更改JList / getScrollableBlockIncrement以进行自然滚动与getScrollableUnitIncrementJList

  • 进行比较

关于两种方式的例子

JTable