Java JList和列表问题 [英] Java JList and list problems

查看:129
本文介绍了Java JList和列表问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我将列表项添加到JList

I added list items to JList

numbersList.add("first example");
numbersList.add("second example");
numbersList.add("third example");

,当我向字段中添加新文本或数字时,它将被添加到列表中并显示在JList中.在这里,我的代码只是想让我按下按钮时,新元素出现在列表numberList中的JList fullList中,该列表已从文本字段numberTxtFld中添加.

and when I add new text or number to field it would would be added into list and showed at JList. Here my code, I just want to make that when I push button new element appear at JList fullList from list numberList which has been added from textfield numberTxtFld.

p.s我已经删除了一些不必要的代码.

p.s i have removed some unnecessary code.

package average;

import java.awt.Color;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.ListSelectionModel;

public class Surface extends JLabel{
    private JTextField numberTxtFld;
    private JLabel topLabel;
    private JLabel sumLabel;
    private JLabel avgLabel;
    private JLabel maxLabel;
    private JLabel minLabel;
    private JLabel amountLabel;
    private JLabel listLabel;
    private JLabel resultLabel;
    private JLabel sumAnswerFld;
    private JLabel avgAnswerFld;
    private JLabel maxAnswerFld;
    private JLabel minAnswerFld;
    private JLabel amountAnswerFld;
    private JLabel fullListLabel;
    private JList fullList;
    final List<String> numbersList = new ArrayList<String>();
    private JButton submitBtn;
    private JButton closeBtn;
    private JPanel panel;

    private int arrayIndex = 0;// used for components adding into array

    public Surface(){
        panel = new JPanel();
        panel.setBackground(Color.WHITE);
        panel.setSize(300, 300);

        panel.setLayout(new GridBagLayout());
        GridBagConstraints gbc = new GridBagConstraints();
        gbc.fill = GridBagConstraints.BOTH;


        topLabel = new JLabel("Enter your number and push submit");
        gbc.gridwidth = 3;
        gbc.gridx = 0; // column 
        gbc.gridy = 0; // row
        panel.add(topLabel, gbc);
        gbc.gridwidth = 1; // setting grid column with to default

        fullListLabel = new JLabel("Full list");
        gbc.gridx = 2;
        gbc.gridy = 1;
        panel.add(fullListLabel, gbc);          

        amountLabel = new JLabel("Amount");
        gbc.gridx = 0;
        gbc.gridy = 5;
        panel.add(amountLabel, gbc);

        amountAnswerFld = new JLabel("0");
        gbc.gridx = 1;
        gbc.gridy = 5;
        panel.add(amountAnswerFld, gbc);



        numberTxtFld = new JTextField();
        numberTxtFld.setColumns(10);
        gbc.gridx = 0;
        gbc.gridy = 1;
        panel.add(numberTxtFld, gbc);       

        submitBtn = new JButton("Submit");
        gbc.gridx = 1;
        gbc.gridy = 1;
        submitBtn.addActionListener(
                new ActionListener(){
                    @Override
                    public void actionPerformed(ActionEvent event) {

                        String text = numberTxtFld.getText();
                        numbersList.add(text);


                    }                   
                }
        );      
        panel.add(submitBtn, gbc);

        numbersList.add("first example");
        numbersList.add("second example");
        numbersList.add("third example");

        fullList = new JList(numbersList.toArray());
        fullList.setVisibleRowCount(6);
        fullList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        gbc.gridheight = 6;
        gbc.gridx = 2;
        gbc.gridy = 2;
        panel.add(new JScrollPane(fullList), gbc);
        gbc.gridheight = 1; // setting grid column with to default

        add(panel);


    }
}

推荐答案

您将需要创建一个ListModel.由于您所做的非常简单,因此可以使用DefaultListModel.

You will need to create a ListModel. As what you are doing is very simple you can use the DefaultListModel.

您需要声明

private DefaultListModel defaultListModel;

并实例化

defaultListModel = new DefaultListModel();

然后将其附加到JLists构造函数中的JList

then attach it to your JList in the JLists constructor

fullList = new JList(defaultListModel);

然后,您可能需要将您的项目添加到defaultListModel中,可能是循环进行

you will then need to add your items to the defaultListModel, probably in a loop

for (Object o : numbersList) {
   defaultListModel.addElement(o);
}

最后,在动作监听器中,您现在需要改为调用defaultListModel上的addElement方法

Finally in your action listener you now need to call the addElement method on the defaultListModel instead

String text = numberTxtFld.getText();
defaultListModel.add(text);

然后,您应该使所有功能正常工作,并为您处理所有更新事件.

Then you should get everything to work as you desire plus all the update events are handled for you.

这篇关于Java JList和列表问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆