java - 关于如何将文本字段中的内容添加到 JList 中

标签 java swing user-interface jlist

我有一个程序需要获取用户输入(从输入框)并将其添加到 JList 中。但是,当我单击程序上的“添加”按钮时,会发生错误。

这是我希望能够工作的代码

JButton addButton = new JButton( "<-Add" );
         addButton.addActionListener(
         new ActionListener() {
            public void actionPerformed( ActionEvent event )
                         {
                         final String name=inputField.getText();
                         // prompt user for new philosopher's name

                         // add new philosopher to model
                         philosophers.addElement( name );
                     }
                 }
                 );

编辑:这是所有代码,尽管我测试了这部分并且我相信它可以工作(除了我尝试添加到文本框的列表器)

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

    public class PhilosophersJList extends JFrame {

     private DefaultListModel philosophers;
     private JList list;
     private JTextField inputField;

     public PhilosophersJList()
         {
         super( "Favorite Philosophers" );

         // create a DefaultListModel to store philosophers
         philosophers = new DefaultListModel();
         philosophers.addElement( "Socrates" );
         philosophers.addElement( "Plato" );
         philosophers.addElement( "Aristotle" );
         philosophers.addElement( "St. Thomas Aquinas" );
         philosophers.addElement( "Soren Kierkegaard" );
         philosophers.addElement( "Immanuel Kant" );
         philosophers.addElement( "Friedrich Nietzsche" );
         philosophers.addElement( "Hannah Arendt" );

         // create a JList for philosophers DefaultListModel
         list = new JList( philosophers );
         JButton addButton = new JButton( "<-Add" );
         addButton.addActionListener(
         new ActionListener() {
            public void actionPerformed( ActionEvent event )
                         {
                         final String name=inputField.getText();
                         // prompt user for new philosopher's name

                         // add new philosopher to model
                         philosophers.addElement( name );
                     }
                 }
                 );




         // create JButton for removing selected philosopher
         JButton removeButton =
         new JButton( "Rem->" );

         removeButton.addActionListener(
             new ActionListener() {

             public void actionPerformed( ActionEvent event )
                 {
                 // remove selected philosopher from model
                 setTitle("Now Removing Contact");
                 try 
                {
                Thread.sleep(1000); // do nothing for 1000 miliseconds (1 second)
                } 
                catch(InterruptedException e)
                {
                e.printStackTrace();
                }
                 philosophers.removeElement(list.getSelectedValue());
                 setTitle("My Contacts List");
             }
         }
         );
         JTextField inputField=new JTextField();
         inputField.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {

            }

        });

         // allow user to select only one philosopher at a time
         list.setSelectionMode(
         ListSelectionModel.SINGLE_SELECTION );
         //Create the text field


         // create JButton for adding philosophers


         // lay out GUI components
         JPanel inputPanel = new JPanel();
         inputPanel.add( addButton);
         inputPanel.add( removeButton);
         inputPanel.setLayout(new BoxLayout(inputPanel,BoxLayout.Y_AXIS));

         inputField.setLayout(new FlowLayout());
         inputField.setBounds(5, 5, 100, 100);
         inputField.setPreferredSize(new Dimension(120,20));
         JScrollPane scrollPane=new JScrollPane(list);
         scrollPane.setPreferredSize(new Dimension(200,200));

         Container container = getContentPane();
         add(scrollPane);
         container.add( inputPanel);
         add( inputField);
         container.setLayout(new FlowLayout());

         setDefaultCloseOperation( EXIT_ON_CLOSE );
         setSize( 500, 250 );
         setVisible( true );

     } // end PhilosophersJList constructor

     // execute application
       public static void main( String args[] )
             {
             new PhilosophersJList();
         }
    }

最佳答案

您没有初始化 inputField 字段。问题出在第 69 行,您在其中声明了一个名为 inputField 的新局部变量,而不是分配该字段。您需要实际引用 inputField 字段。

所以而不是

JTextField inputField = new JTextField();

你应该只写

inputField = new JTextField();

关于java - 关于如何将文本字段中的内容添加到 JList 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10080307/

相关文章:

java - 关于多线程的问题

java - 为什么 log4j 消息没有显示在控制台中?

java - 如何将信息从一个对象传递到另一个对象

java - 尝试制作一个 JFrame,其中包含两个具有自己的类的 JPanel,然后使用 mouseListener 在两个 JPanel 上绘制形状

java - 修复 Swing 元素相对于父元素的位置

java - 传递给paint(Graphics)函数什么值? (AWT)

java - 使用不带数组的扫描仪从文本文件中删除重复数据 (Java)

java - 将 Double 转换为 Bigdecimal 时值缩小

html - 如何在 CSS 中制作带有对 Angular 线网格的响应式菜单?

javascript - React.js 中使用像 componentWillMount 这样的函数的目的是什么?