2015-08-18 3 views
3

Я хочу добавить пользовательские объекты, которые расширяют JPanel в JList. Все в порядке, но я не могу с ними взаимодействовать. Например, я не могу ввести JTextField, который добавляется на панель. Я использую DefaultListModel<ListItem = new DefaultListModel<ListItem>(); Помощник Plase.Добавление JPanel в JList

Это пользовательский объект

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()); 

ответ

5

Я хочу добавить пользовательские объекты, которые расширяют JPanel в JList. Все в порядке, но я не могу с ними взаимодействовать. Например, я не могу ввести JTextField, который добавляется на панель.

Это связано с тем, что Jlist не содержит или не показывает компоненты, а представляет собой лишь визуализацию компонентов. Если вы хотите, чтобы список вроде объекта содержал компоненты, которые могут быть отредактирован, с которым пользователь может взаимодействовать, либо создайте свой собственный - используя JPanel, который использует GridLayout, и держит сетку ваших компонентов, либо использует JTable, который имеет как минимум два столбца, один («метка»), который не редактируется, а другой («текстовое поле»).

+0

«создайте свой собственный», что вы подразумеваете под этим, создайте свой собственный список? –

+0

@ ЂрђеЂашић: Да, вроде. Если у вас небольшое количество ячеек, создайте JPanel, который использует GridLayout, добавьте к нему свои ячейки и поместите его внутри JScrollPane. –

+0

Прошу прощения, может быть, это будет звучать как вопрос новичков, но как мне создать свой собственный список? Список JList = новый JList()? Я уже это делаю. –