将JPanel添加到JList

Ђор*_*шић 3 java swing list jpanel

我想添加一个扩展JPanel到JList 的自定义对象.一切都很好,但我无法与他们互动.例如,我无法输入JTextField面板上添加的内容.我使用DefaultListModel<ListItem = new DefaultListModel<ListItem>();Plase帮助.

这是自定义对象

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");
}
Run Code Online (Sandbox Code Playgroud)

这是渲染器

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;
}
Run Code Online (Sandbox Code Playgroud)

这就是我创建List的方式

list = new JList<ListItem>(addedItems);
Run Code Online (Sandbox Code Playgroud)

ListItem temp = new ListItem();
addedItems.addElement(temp);
list.setCellRenderer(new ListItemRenderer());
Run Code Online (Sandbox Code Playgroud)

Hov*_*els 5

我想添加一个自定义对象,将JPanel扩展为JList.一切都很好,但我无法与他们互动.例如,我无法输入面板上添加的JTextField.

这是因为Jlist不保存或显示组件,而只是呈现组件.如果你想要一个像对象一样的列表,其中包含可以编辑的组件,用户可以与之交互,那么要么创建自己的组件 - 使用使用GridLayout的JPanel并保存组件的网格,要么使用具有at的JTable.至少两列,一个("标签")不可编辑,另一个("文本字段")是.