将 JPanel 添加到 JList
Adding JPanel to JList
我想添加一个扩展 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());
I want to add a custom objects that extend JPanel into a JList. Everything is fine, but I can not interact with them. For example, I can not type in the JTextField which is added on panel.
这是因为 Jlist 不包含或显示组件,而只是渲染组件。如果您想要一个类似对象的列表,其中包含可以 编辑 的组件,用户可以与之交互,那么要么创建您自己的 - 使用使用 GridLayout 并包含网格的 JPanel您的组件,或使用至少有两列的 JTable,一列("label")不可编辑,另一列("text field")不可编辑。
我想添加一个扩展 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());
I want to add a custom objects that extend JPanel into a JList. Everything is fine, but I can not interact with them. For example, I can not type in the JTextField which is added on panel.
这是因为 Jlist 不包含或显示组件,而只是渲染组件。如果您想要一个类似对象的列表,其中包含可以 编辑 的组件,用户可以与之交互,那么要么创建您自己的 - 使用使用 GridLayout 并包含网格的 JPanel您的组件,或使用至少有两列的 JTable,一列("label")不可编辑,另一列("text field")不可编辑。