【问题标题】:Button ActionPerfomed move string from JList to JList按钮 ActionPerfomed 将字符串从 JList 移动到 JList
【发布时间】:2016-01-09 20:10:35
【问题描述】:

我正在对我想参加的项目进行评估。我仍然对如何解释、理解或正确使用该项目提供的位于 Tutorials Point 的“教程”有所转变。

使用 Netbeans 8.1 创建的 Jlist --> JFrame Form GUI Builder

public class Window extends javax.swing.JFrame {

/**
 * Creates new form for BootcampAssessmentGui
 */
public Window() {
    initComponents();
}

/**
 * This method is called from within the constructor to initialize the form.
 * WARNING: Do NOT modify this code. The content of this method is always
 * regenerated by the Form Editor.
 */
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">                          
private void initComponents() {

    controlsbuttonGroup = new javax.swing.ButtonGroup();
    partsScrollPane = new javax.swing.JScrollPane();
    partsList = new javax.swing.JList<>();
    buildScrollPane = new javax.swing.JScrollPane();
    buildList = new javax.swing.JList<>();
    addButton = new javax.swing.JButton();
    removeButton = new javax.swing.JButton();
    jMenuBar1 = new javax.swing.JMenuBar();
    fileMenu = new javax.swing.JMenu();
    loadMenuItem = new javax.swing.JMenuItem();
    saveMenuItem = new javax.swing.JMenuItem();
    exitMenuItem = new javax.swing.JMenuItem();

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
    setTitle("Devereaux Assessment");

    partsList.setModel(new javax.swing.AbstractListModel<String>() {
        String[] strings = { "Case", "Motherboard", "CPU", "RAM", "GPU", "HDD", "PSU" };
        public int getSize() { return strings.length; }
        public String getElementAt(int i) { return strings[i]; }
    });
    partsScrollPane.setViewportView(partsList);

    buildScrollPane.setViewportView(buildList);

    addButton.setText(">>");
    addButton.setToolTipText("Add Parts to Build list");
    controlsbuttonGroup.add(addButton);
    addButton.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            addButtonActionPerformed(evt);
        }
    });

    removeButton.setText("<<");
    removeButton.setToolTipText("Remove Parts from Build list");
    controlsbuttonGroup.add(removeButton);
    removeButton.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            removeButtonActionPerformed(evt);
        }
    });

    fileMenu.setText("File");

    loadMenuItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_L, java.awt.event.InputEvent.CTRL_MASK));
    loadMenuItem.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/cooksys/assessment/arrow95.png"))); // NOI18N
    loadMenuItem.setText("Load");
    fileMenu.add(loadMenuItem);

    saveMenuItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_S, java.awt.event.InputEvent.CTRL_MASK));
    saveMenuItem.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/cooksys/assessment/floppy13.png"))); // NOI18N
    saveMenuItem.setText("Save");
    fileMenu.add(saveMenuItem);

    exitMenuItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_X, java.awt.event.InputEvent.CTRL_MASK));
    exitMenuItem.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/cooksys/assessment/exit18.png"))); // NOI18N
    exitMenuItem.setText("Exit");
    exitMenuItem.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            exitMenuItemActionPerformed(evt);
        }
    });
    fileMenu.add(exitMenuItem);

    jMenuBar1.add(fileMenu);

    setJMenuBar(jMenuBar1);

    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
    getContentPane().setLayout(layout);
    layout.setHorizontalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(layout.createSequentialGroup()
            .addContainerGap()
            .addComponent(partsScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, 209, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 31, Short.MAX_VALUE)
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addComponent(addButton)
                .addComponent(removeButton))
            .addGap(28, 28, 28)
            .addComponent(buildScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, 209, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addContainerGap())
    );
    layout.setVerticalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(layout.createSequentialGroup()
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(layout.createSequentialGroup()
                    .addContainerGap()
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                        .addComponent(buildScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, 279, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addComponent(partsScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, 279, javax.swing.GroupLayout.PREFERRED_SIZE)))
                .addGroup(layout.createSequentialGroup()
                    .addGap(125, 125, 125)
                    .addComponent(addButton)
                    .addGap(18, 18, 18)
                    .addComponent(removeButton)))
            .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
    );

    pack();
}// </editor-fold>                        

private void exitMenuItemActionPerformed(java.awt.event.ActionEvent evt) {                                             
    System.exit(0);
}                                            

private void addButtonActionPerformed(java.awt.event.ActionEvent evt) {                                          
    // add Parts to buildList
  for (Object selectedValue : partsList.getSelectedValuesList()) {
      buildList.addElement(selectedValue);
      partsList.removeElement(selectedValue);
      int  iSelected = partsList.getSelectedIndex();
      if (iSelected == -1) {
          return;
      }
    }
}                                         

private void removeButtonActionPerformed(java.awt.event.ActionEvent evt) {                                             
    // remove Parts from buildList
    for (Object selectedValue : buildList.getSelectedValuesList()) {
      partsList.addElement(selectedValue);
      buildList.removeElement(selectedValue);
      int  iSelected = buildList.getSelectedIndex();
      if (iSelected == -1) {
          return;
      }
    }
}                                            

/**
 * @param args the command line arguments
 */
public static void main(String args[]) {
    /* Set the Nimbus look and feel */
    //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
    /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
     * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
     */
    try {
        for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
            if ("Nimbus".equals(info.getName())) {
                javax.swing.UIManager.setLookAndFeel(info.getClassName());
                break;
            }
        }
    } catch (ClassNotFoundException ex) {
        java.util.logging.Logger.getLogger(Window.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (InstantiationException ex) {
        java.util.logging.Logger.getLogger(Window.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (IllegalAccessException ex) {
        java.util.logging.Logger.getLogger(Window.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (javax.swing.UnsupportedLookAndFeelException ex) {
        java.util.logging.Logger.getLogger(Window.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    }
    //</editor-fold>
    //</editor-fold>

    /* Create and display the form */
    java.awt.EventQueue.invokeLater(new Runnable() {
        public void run() {
            new Window().setVisible(true);
        }
    });
}

// Variables declaration - do not modify                     
private javax.swing.JButton addButton;
private javax.swing.JList<String> buildList;
private javax.swing.JScrollPane buildScrollPane;
private javax.swing.ButtonGroup controlsbuttonGroup;
private javax.swing.JMenuItem exitMenuItem;
private javax.swing.JMenu fileMenu;
private javax.swing.JMenuBar jMenuBar1;
private javax.swing.JMenuItem loadMenuItem;
private javax.swing.JList<String> partsList;
private javax.swing.JScrollPane partsScrollPane;
private javax.swing.JButton removeButton;
private javax.swing.JMenuItem saveMenuItem;
// End of variables declaration                   
}

我收到错误找不到符号 - 符号:方法 addElement(Object) location:Jlist的可变partsList类型

这个错误对我来说非常直接。我的问题是我见过的大多数示例都是使用 DefaultListModel。 NetBeans 正在使用 AbstractListModel 方法。

我查看了以下参考资料:

http://www.java2s.com/Code/Java/Swing-JFC/DualJListwithbuttonsinbetween.htm http://docs.oracle.com/javase/tutorial/uiswing/components/list.html#scrollingapi

但老实说,我觉得我没有正确理解如何使用这些源进行调试。我觉得我没有正确使用基于这段代码的 Object --> String:

 private void clearDestinationSelected() {
Object selected[] = destList.getSelectedValues();
for (int i = selected.length - 1; i >= 0; --i) {
  destListModel.removeElement(selected[i]);
}
destList.getSelectionModel().clearSelection();

}

我将在代码中通过注释包含此帮助请求。我不是骗子。几天来,我一直在寻找、工作、搜索和思考这个问题。在这一点上,我觉得寻求帮助是谨慎的。

【问题讨论】:

  • “我的问题是我看到的大多数示例都使用 DefaultListModel。NetBeans 使用的是 AbstractListModel 方法。” 这是您需要 a)了解如何让 IDE 执行 想要的操作。 b) 或者转储 IDE 并学习如何编写 Java。
  • NetBeans is using the AbstractListModel method. - 好吧,不要。使用 DefaultListModel。您的问题在于 IDE,而不是 Swing。我建议您学习如何创建 DefaultListModel,将数据添加到模型,然后将模型添加到 JList。 Swing 教程中的 Hire/Fire 演示示例可以满足您的所有需求。它向您展示了如何 1) 最初将数据加载到模型中,然后 2) 动态更改模型。下载该演示并将其用作起点,而不是让 IDE 为您生成代码。

标签: java swing compiler-errors jlist cannot-find-symbol


【解决方案1】:

这里的 API 将帮助您,因为如果您查看 JList API,您会发现您的编译器是正确的,JList 没有 addElement(...) 方法,但不要灰心—— DefaultListModel类有这个方法,你可以通过调用getModel()从你的JList中提取这个方法,然后在提取的模型上调用addElement(...)

编辑:不好,你使用的是从 AbstractListModel 派生的自己的模型——你需要让你的模型非抽象——给它一个类名,然后给你的 Model 类一个 addElement 方法。无论是那个或更简单的,使用您用数据填充的 DefaultListModel 对象。

【讨论】:

    猜你喜欢
    • 2016-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-03
    相关资源
    最近更新 更多