JList的问题

时间:2013-11-05 23:31:34

标签: java jlist

我们的老师不希望我们在GUI类中做任何事情,因此我们所有添加和删除元素都必须在其自己的类中。我已经阅读了关于向量以及在JList中添加和删除元素的内容,但就像我说的那样我们不允许这样做。我的问题是当我需要填充新列表或更新原始列表时,我将如何清除列表或刷新它。我的问题是每次单击打开按钮时列表都会重复,当我需要它时,每次单击它都会刷新。

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import javax.swing.*;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import java.util.Collections;

import java.io.*;

/* Simple example of using the contents of a file to populate a JList
 * 
 * @author Jill Courte
 */

public class JListFromFile extends JFrame {

  private TextField wordA;
  private TextField wordB;
  private JButton openButton;
  private JButton newButton;
  private JButton addButton;
  private JButton deleteButton;
  private JButton saveButton;
  private TextField output;
  private JList listFromFile;
  private JPanel listPanel;
  private JPanel textPanel;
  private JPanel inputPanel;
  private JPanel buttonsPanel;
  private DataSource2 dataSource;
  private WordPair wordPair;
  public JListFromFile ()
  {
    // create the object to provide the data
    dataSource = new DataSource2();
    wordPair = new WordPair();
    // use a border layout for the main window
    getContentPane().setLayout(new BorderLayout(20, 20));

    buttonsPanel = new JPanel();
    openButton = new JButton("Open");
    newButton = new JButton("New");
    addButton = new JButton("Add");
    deleteButton = new JButton("Delete");
    saveButton = new JButton("Save");
    addButton.setEnabled( false ); 
    deleteButton.setEnabled( false );
    saveButton.setEnabled( false );
    buttonsPanel.add(openButton);
    buttonsPanel.add(newButton);
    buttonsPanel.add(addButton);
    buttonsPanel.add(deleteButton);
    buttonsPanel.add(saveButton);

    //add the button listeners
    openButton.addActionListener(new OpenButtonListener());
    addButton.addActionListener(new AddButtonListener());

    add(buttonsPanel, BorderLayout.NORTH);

    // create the panel to hold the list
    listPanel = new JPanel();

    // create your JList
    listFromFile = new JList();
    listFromFile.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    listFromFile.setSelectedIndex(0);

    //add the list selection listener
   listFromFile.addListSelectionListener(new WordSelection());

    //add the translation text box 
    textPanel = new JPanel();
    output = new TextField();
    output.setEditable(false);
    output.setPreferredSize(new Dimension(200, 25));
    textPanel.add(output);

    // add scroll bars to list 
    JScrollPane listScrollPane = new JScrollPane(listFromFile);
    listScrollPane.setPreferredSize(new Dimension(150, 200));

    //add user input textfield 
    wordA = new TextField ("Word to Add");
    wordB = new TextField ("Translated word");
    wordA.setPreferredSize(new Dimension(200, 25));
    wordB.setPreferredSize(new Dimension(200, 25));
    wordA.setEnabled(false);
    wordB.setEnabled(false);

    //create panel to hold input textfield
    inputPanel = new JPanel();
    inputPanel.add(wordA);
    inputPanel.add(wordB);

    //add the list (via the scroll pane) to the panel
    listPanel.add(listScrollPane);

    //add the panels to the frame
    add(listPanel, BorderLayout.WEST);
    add(textPanel, BorderLayout.CENTER);
    add(inputPanel, BorderLayout.SOUTH);
    pack();
  }


  private File findFile ()
  { 
    JFileChooser chooser = new JFileChooser();

    chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);

    // Start in current directory
    chooser.setCurrentDirectory(new File("."));
    int status = chooser.showOpenDialog(null);      

    if (status != JFileChooser.APPROVE_OPTION)
    {
      JOptionPane.showMessageDialog(null, "No File Selected");
      throw new NoFileChoosenException();
    }
    else
    {    
      File file = chooser.getSelectedFile();

      System.out.println(file.getName());      
      System.out.println(file.getPath());


      return file;
    }
  }


  private class OpenButtonListener implements ActionListener
  {
    public void actionPerformed (ActionEvent event)
    {

      File file = null;

      try
      {
        file = findFile();

        //tell the data source what file to use
        dataSource.readDataFromFile(file);

        //JList needs an array of strings, retrieve it from the data source
        String [] data = dataSource.getData();

        data = dataSource.insertion(data);
        data = wordPair.remove(data);
        listFromFile.setListData(data);
      }
      catch (Exception e)
      { 
      }
      addButton.setEnabled(true); 
      deleteButton.setEnabled(true);
      saveButton.setEnabled(true);
      wordA.setEnabled(false);
      wordB.setEnabled(false);
    }
  }

  private class AddButtonListener implements ActionListener
  {
    public void actionPerformed (ActionEvent event)
    {
      wordA.setEnabled(true);
      wordB.setEnabled(true);

    }
  }

  private class WordSelection implements ListSelectionListener
     {
      public void valueChanged (ListSelectionEvent event)
      {
          int index = listFromFile.getSelectedIndex();
          if (index >= 0)
          {
           String s = wordPair.getWord(2, index);
           output.setText(s);
          }
      }
     }

  public static void main(String[] args)
  {
    JListFromFile jListFromFile = new JListFromFile();
    jListFromFile.setVisible(true);
  }
}

0 个答案:

没有答案