将JPanel添加到JList中

3
我想将一个继承了 JPanel 的自定义对象添加到 JList 中。一切都很好,但是我无法与它们进行交互。例如,我无法在面板上添加的 JTextField 中输入文本。我使用了 DefaultListModel<ListItem> = new DefaultListModel<ListItem>();。请帮忙解决。
这是自定义对象:
public class ListItem extends JPanel{

private static final long serialVersionUID = 1L;
private JTextField textField;

public ListItem() {
    setLayout(new MigLayout("", "[grow][grow]", "[30px:n:30px][30px:n:30px][30px:n:30px]"));

    JLabel lblNewLabel = new JLabel("New label");
    add(lblNewLabel, "cell 0 0,alignx trailing");

    textField = new JTextField();
    add(textField, "cell 1 0,growx");
}

这是渲染器。
public class ListItemRenderer implements ListCellRenderer<Object>{

@Override
public Component getListCellRendererComponent(JList<? extends Object> list, Object value, int index,
        boolean isSelected, boolean cellHasFocus) {

    Component component = (Component) value;

    if(isSelected)
        component.setBackground(Color.RED);

    return component;
}

这是我创建列表的方法。
list = new JList<ListItem>(addedItems);

并且
ListItem temp = new ListItem();
addedItems.addElement(temp);
list.setCellRenderer(new ListItemRenderer());
1个回答

5
我想将一个扩展了JPanel的自定义对象添加到JList中。所有都很好,但我无法与它们交互。例如,我无法在附加在面板上的JTextField中输入内容。
那是因为JList并不包含或显示组件,而只渲染组件。如果您想要一个类似列表的对象来容纳可以被编辑和用户可以与之交互的组件,则可以创建自己的对象--使用布局为GridLayout且包含一组组件的JPanel,或者使用至少有两列的JTable,其中一列(“标签”)不可编辑,另一列(“文本字段”)可编辑。

“either create your own” 的意思是要么自己创建一个,你指的是创建自己的列表吗? - Ђорђе Ђашић
@ЂорђеЂашић:是的,有点像。如果你只有少量的单元格,那么可以创建一个使用GridLayout的JPanel,将单元格添加到其中,并将其放置在JScrollPane中。 - Hovercraft Full Of Eels
很抱歉,也许这听起来像新手问题,但我该如何创建自己的列表?JList list = new JList()?我已经这样做了..? - Ђорђе Ђашић
@ЂорђеЂашић:就像我在上面的评论中解释的那样。 - Hovercraft Full Of Eels
是的,看起来这就是正确的方法。非常感谢。 - Ђорђе Ђашић

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接