簡體   English   中英

將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的方式

list = new JList<ListItem>(addedItems);

ListItem temp = new ListItem();
addedItems.addElement(temp);
list.setCellRenderer(new ListItemRenderer());

我想添加一個自定義對象,將JPanel擴展為JList。 一切都很好,但我無法與他們互動。 例如,我無法輸入面板上添加的JTextField。

這是因為Jlist不保存或顯示組件,而只是呈現組件。 如果你想要一個像對象一樣的列表,其中包含可以編輯的組件,用戶可以與之交互,那么要么創建自己的組件 - 使用使用GridLayout的JPanel並保存組件的網格,要么使用具有at的JTable。至少兩列,一個(“標簽”)不可編輯,另一個(“文本字段”)是。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM