【问题标题】:Troubles getting JList components获取 JList 组件的问题
【发布时间】:2019-10-07 06:02:06
【问题描述】:

获取JList getSelectedIndicesgetComponents 时遇到问题。显示的代码被包装到按钮的 actionPerformed -> ActionListener 中。

这是我的一段代码:

public class PanelLeft extends JPanel {

    private DefaultListModel<String> dlm;
    private JList<String> list;
    
    public PanelLeft() {
        
        dlm = new DefaultListModel<String>();
        dlm.addElement("FOL");
        dlm.addElement("SSII");
        dlm.addElement("EEDD");
        dlm.addElement("Marcas");
        dlm.addElement("BBDD");
        dlm.addElement("Programación");
        
        list = new JList<String>(dlm);
        list.setFixedCellWidth(200);
        
        
        JScrollPane jsp = new JScrollPane(list);
        jsp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
        jsp.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
        
        add(jsp);
    }

    public JList<String> getList() {
        return list;
    }
}

对于ActionListener

class ControlToRight implements ActionListener {

    private PanelLeft pl;
    private PanelRight pr;
    
    public ControlToRight(PanelLeft panL,PanelRight panR) {
        pl = panL;
        pr = panR;
    }
    
    @Override
    public void actionPerformed(ActionEvent e) {
        if(pl.getList().getSelectedValuesList() != null) {
            for(int i : pl.getList().getSelectedIndices()) {
                pr.getList().add(pl.getList().getComponent(i));
            }
        }
    }
}

它应该将左侧面板列表(pl)中的组件添加到右侧面板列表(pr)中。

实际结果是什么都没有。它什么都不做,没有ArrayIndexOutOfBounds,什么都没有。它甚至不会跳入for 循环。

【问题讨论】:

  • 您使用的 JList 错误。请阅读documentationtutorial
  • 代码已更新,因为我看不出 JList 的使用有什么问题,我的老师也没有。对不起,这里的新手,现在了解有据可查的帖子的重要性。
  • 列表包含数据,而不是组件。要将数据从一个列表移动到另一个列表,请将其从第一个列表的模型中删除,然后将其添加到第二个列表的模型中。

标签: java swing jlist


【解决方案1】:

您没有看到任何内容的原因是您没有将 ControlToRight(ActionListener) 添加到任何列表上的侦听器列表中。

变化:

public ControlToRight(PanelLeft panL,PanelRight panR) {
    pl = panL;
    pr = panR;
    pl.getList().addActionListener(this);
    pr.getList().addActionListener(this);
}

【讨论】:

    猜你喜欢
    • 2023-04-07
    • 1970-01-01
    • 2010-11-01
    • 1970-01-01
    • 2012-01-30
    • 1970-01-01
    • 2018-09-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多