【问题标题】:Adding JPanel to JList将 JPanel 添加到 JList
【发布时间】:2015-11-11 23:49:35
【问题描述】:

我想将扩展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());

【问题讨论】:

    标签: java swing list jpanel


    【解决方案1】:

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

    这是因为 Jlist 不保存或显示组件,而只是渲染组件。如果您想要一个类似对象的列表,其中包含可以编辑的组件,用户可以与之交互,然后创建您自己的 - 使用使用 GridLayout 并保存组件网格的 JPanel,或使用至少有两列的 JTable,一列(“标签”)不可编辑,另一列(“文本字段”)可编辑。

    【讨论】:

    • “要么创建你自己的”你的意思是,创建我自己的列表?
    • @ЂорђеЂашић:是的,有点。如果您有少量单元格,则创建一个使用 GridLayout 的 JPanel,将您的单元格添加到其中,并将其放在 JScrollPane 内。
    • 对不起,这听起来像是新手问题,但我如何创建自己的列表? JList 列表 = 新的 JList() ?我已经这样做了..?
    • @ЂорђеЂашић:就像我在上面的评论中解释的那样。
    • 是的,这似乎就是这样做的方式。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-03
    • 2012-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多