這是我的項目的SSCCE,我忽略了所有異常和註釋以及不相關的按鈕,標籤和方法。 嘗試用其同義詞插入一個單詞,然後選擇一個單詞,然後在選中該單詞的同時嘗試插入另一對單詞 - 同義詞,會出現異常
import javax.swing.AbstractListModel; import javax.swing.DefaultListModel; import javax.swing.JList; import javax.swing.JPanel; import javax.swing.JFrame; import javax.swing.JScrollPane; import java.awt.Rectangle; import java.util.HashMap; import java.util.Map; import java.util.Set; import javax.swing.JTextField; import javax.swing.JButton; import javax.swing.event.ListSelectionEvent; import javax.swing.event。ListSelectionListener;
公共類Synonims延伸的JFrame {
private static final long serialVersionUID = 1L;
private JPanel jContentPane = null;
private JScrollPane wordsPane = null;
private JScrollPane synosymsPane = null;
private JTextField wordField = null;
private JTextField synonymsField = null;
private JButton addButton = null;
private JList wordsList=new JList(new DefaultListModel());
private JList synonymsList=new JList(new DefaultListModel());
private SynonymsManager manager=new SynonymsManager();
//default const
public Synonims() {
super();
initialize();
}
//init
private void initialize() {
this.setSize(413, 285);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setContentPane(getJContentPane());
this.setTitle("JFrame");
}
//contentpane
private JPanel getJContentPane() {
if (jContentPane == null) {
jContentPane = new JPanel();
jContentPane.setLayout(null);
jContentPane.add(getWordsPane(), null);
jContentPane.add(getSynosymsPane(), null);
jContentPane.add(getWordField(), null);
jContentPane.add(getSynonymsField(), null);
jContentPane.add(getAddButton(), null);
}
return jContentPane;
}
//RELEVANT: LISTSELECTIONLISTENER
private JScrollPane getWordsPane() {
if (wordsPane == null) {
wordsPane = new JScrollPane();
wordsPane.setBounds(new Rectangle(16, 15, 121, 177));
wordsPane.getViewport().add(wordsList,null);
wordsList.addListSelectionListener(new ListSelectionListener() {
public void valueChanged(ListSelectionEvent evt) {
getSyn(evt);
}
});
}
return wordsPane;
}
//RELEVANT: GET THE SYNONYMS OF THE SELECTED WORD
public void getSyn(ListSelectionEvent e){
String word=(String)wordsList.getSelectedValue();
Object[] synArray=(Object[])manager.getValues(word);
synonymsList.setListData(synArray);
}
//synonymspane
private JScrollPane getSynosymsPane() {
if (synosymsPane == null) {
synosymsPane = new JScrollPane();
synosymsPane.setBounds(new Rectangle(254, 14, 133, 181));
synosymsPane.getViewport().add(synonymsList,null);
}
return synosymsPane;
}
//wordfield
private JTextField getWordField() {
if (wordField == null) {
wordField = new JTextField();
wordField.setBounds(new Rectangle(16, 209, 129, 27));
}
return wordField;
}
//synonymsfield
private JTextField getSynonymsField() {
if (synonymsField == null) {
synonymsField = new JTextField();
synonymsField.setBounds(new Rectangle(254, 207, 136, 30));
}
return synonymsField;
}
//the button
private JButton getAddButton() {
if (addButton == null) {
addButton = new JButton();
addButton.setBounds(new Rectangle(164, 228, 72, 25));
addButton.setText("save");
addButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
addAction();
}
});
}
return addButton;
}
//RELEVANT: THE METHODS THAT LOADS BOTH WORD AND SYNONYMS
public void addAction(){
String newWord=wordField.getText();
String newSynonyms= synonymsField.getText();
String[] synonymsArray=newSynonyms.split(" ");
manager.addSyn(newWord, synonymsArray);
wordField.setText("");
synonymsField.setText("");
wordsList.setListData(manager.getKeys());
}
//INNER CLASS FOR THE SYNONYMS
public class Synonym{
private String[] synonym=null;
public Synonym(String[]synonym){
this.synonym=synonym;
}
public String[] getSynonyms(){
return this.synonym;
}
}
//INNER CLASS THAT MANAGES THE SYNONYMS
public class SynonymsManager extends AbstractListModel{
private Map<String,Synonym> manager=null;
public SynonymsManager(){
manager=new HashMap<String,Synonym>();
}
public void addSyn(String woord, String[] synonyms){
Synonym syn=new Synonym(synonyms);
manager.put(woord, syn);
fireContentsChanged(this,0,getSize() -1);
}
public Object getElementAt(int arg0) {
return null;
}
public int getSize() {
return 0;
}
public Object[] getKeys(){
Set<String>keySet=manager.keySet();
Object[] keys=keySet.toArray();
return keys;
}
public Object[] getValues(String woord){
Object[] values=search(woord).getSynonyms();
return values;
}
public Synonym search(String word){
return manager.get(word);
}
}
public static void main(String[] args){
Synonims s=new Synonims();
s.setVisible(true);
}
}
'e.getValueIsAdjusting()''中getSynoniemen(...)'是冗餘的。 – mre
我也推薦閱讀[如何使用列表](http://download.oracle.com/javase/tutorial/uiswing/components/list.html),也許這會給你一些見解。從您發佈的代碼片段中,很難評估這裏的真正潛在問題。 – mre