【问题标题】:Java JList problemsJava JList 问题
【发布时间】:2015-06-27 23:35:07
【问题描述】:

好吧,我想做的是让用户自己制作一个列表,无论他们在 TextField 中输入什么,其输出都会显示在 Jlist 中,但我的问题是,如果我输入另一个单词到 TextField 的输出是附加或替换已经存在的另一个单词,它应该放在另一个单词下面并保存在那里,谁能帮助我吗??

    public lala(){

    b2 = new JButton("ADD");
    b2.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent e){
        model.removeAllElements();
        list1.setModel(model);

       }
    });

    b3 = new JButton("MOVE");
    b3.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent e){
          model = new DefaultListModel<String>(); 
          model.addElement(field.getText());
          list.setModel(model);
          field.setText("");

        }
    });

    list = new JList<String>();
    list.setFixedCellHeight(10);
    list.setFixedCellWidth(10);
    list.setVisibleRowCount(10);
    list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

    scroll = new JScrollPane(list);
    scroll.setPreferredSize(new Dimension(100,100));

    field = new JTextField(19);
    field.setToolTipText("Input Text Area Here");
    field.setFont(new Font("Corier",Font.BOLD,20));
    field.setBackground(Color.BLACK);
    field.setForeground(Color.RED);
    field.setDragEnabled(true);

    panel = new JPanel();
    panel.setBackground(Color.BLACK);

    panel.add(b3);
    //panel.add(b2);
    panel.add(field);
    panel.add(scroll);
    add(panel);

      } 
    }

【问题讨论】:

  • 为了尽快获得更好的帮助,请发布MCVE(最小完整可验证示例)或SSCCE(简短、自包含、正确示例)。
  • field.setFont(new Font("Corier",Font.BOLD,20)); 这里没有Corier 字体,虽然可能有Courier 字体。 OTOH 我更喜欢使用像 Font.MONOSPACED 这样的逻辑字体来实现跨平台的健壮性。

标签: java swing jlist defaultlistmodel


【解决方案1】:

您的问题是您正在事件侦听器中的每个操作上创建一个全新的DefaultListModel

您需要在用户按下按钮时向其声明全局 DefaultListModel 和 addElement()

这可能有助于为您指明正确的方向:

public class Examples {

    private DefaultListModel modelList;
    private JList list;
    private JButton button;
    private JTextField field;

    public Examples() {
        modelList = new DefaultListModel();
        list = new JList(modelList);
        button = new JButton("Add To List");
        field = new JTextField();
        init();
    }

    private void init() {
        button.addActionListener((ActionEvent e) -> {
            modelList.addElement(field.getText());
            // !! list.setModel(modelList);
            field.setText("");
        });
    }

}

在这里,我们将 DefaultListModel 注册为 Examples 类中的实例字段。

然后我们使用 lambda 表达式注册一个新的侦听器,并使用字段文本更新 modelList,并将 modelList 设置为 JList 的模型。

【讨论】:

  • 为什么要在 ActionListener 中重新设置模型列表?该列表已设置为相同的模型。我评论了这一点,因为它似乎完全没有必要。我还删除了“全局变量”,因为 Java 没有这些,但“实例字段”似乎更合适。
  • 如果它有助于解决问题,请accept the answer
猜你喜欢
  • 1970-01-01
  • 2013-08-06
  • 1970-01-01
  • 2013-05-19
  • 2012-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-07
相关资源
最近更新 更多