2012-01-19 58 views
-1

我想添加偵聽器到jlist。但項目會動態添加到jlist。 所以我不能註冊監聽。 和事件不起火。 可以any1幫我嗎? plzz聯繫我,如果你有任何例子。 我的電子郵件ID [email protected]
這裏是我的代碼:

JList - ListSelectionListener

DefaultListModel f=new DefaultListModel(); 
DefaultListModel sf=new DefaultListModel(); 

public Jlistdemo() { 
    initComponents(); 

    System.out.println("hi"); 
    for(int i=0;i<10;i++) 
    { 
     f.addElement("hello"+i); 
     //System.out.println("helloo"+i); 
    } 
    fields=new JList(f); 
    jScrollPane1.setViewportView(fields); 

} 


@SuppressWarnings("unchecked") 
// <editor-fold defaultstate="collapsed" desc="Generated Code"> 
private void initComponents() { 

    jScrollPane1 = new javax.swing.JScrollPane(); 
    fields = new javax.swing.JList(); 
    jScrollPane2 = new javax.swing.JScrollPane(); 
    sel_fields = new javax.swing.JList(); 
    jButton1 = new javax.swing.JButton(); 
    jButton2 = new javax.swing.JButton(); 

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); 

    fields.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION); 
    jScrollPane1.setViewportView(fields); 

    sel_fields.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION); 
    sel_fields.addListSelectionListener(new javax.swing.event.ListSelectionListener() { 
     public void valueChanged(javax.swing.event.ListSelectionEvent evt) { 
      sel_fieldsValueChanged(evt); 
     } 
    }); 
    jScrollPane2.setViewportView(sel_fields); 

    jButton1.setText(">"); 
    jButton1.addActionListener(new java.awt.event.ActionListener() { 
     public void actionPerformed(java.awt.event.ActionEvent evt) { 
      jButton1ActionPerformed(evt); 
     } 
    }); 

    jButton2.setText("<"); 
    jButton2.addActionListener(new java.awt.event.ActionListener() { 
     public void actionPerformed(java.awt.event.ActionEvent evt) { 
      jButton2ActionPerformed(evt); 
     } 
    }); 

    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); 
    getContentPane().setLayout(layout); 
    layout.setHorizontalGroup(
     layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addGroup(layout.createSequentialGroup() 
      .addGap(40, 40, 40) 
      .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 89, javax.swing.GroupLayout.PREFERRED_SIZE) 
      .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 
      .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
       .addComponent(jButton1, javax.swing.GroupLayout.Alignment.TRAILING) 
       .addComponent(jButton2, javax.swing.GroupLayout.Alignment.TRAILING)) 
      .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) 
      .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 109, javax.swing.GroupLayout.PREFERRED_SIZE) 
      .addGap(91, 91, 91)) 
    ); 
    layout.setVerticalGroup(
     layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addGroup(layout.createSequentialGroup() 
      .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) 
       .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 
       .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
        .addGroup(layout.createSequentialGroup() 
         .addGap(31, 31, 31) 
         .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) 
        .addGroup(layout.createSequentialGroup() 
         .addGap(60, 60, 60) 
         .addComponent(jButton1) 
         .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 
         .addComponent(jButton2)))) 
      .addContainerGap(68, Short.MAX_VALUE)) 
    ); 

    pack(); 
} 

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { 
    if(fields.getSelectedValue()!=null) 
    { 
     int i=fields.getSelectedIndex(); 

     sf.addElement(fields.getSelectedValue()); 
     f.removeElement(fields.getSelectedValue()); 
     sel_fields=new JList(sf); 
     sel_fields.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); 
     jScrollPane2.setViewportView(sel_fields); 
     fields.setSelectedIndex(i); 
     jScrollPane2.revalidate(); 
     jScrollPane2.repaint(); 
    } 
} 

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) { 
    if(sel_fields.getSelectedValue()!=null) 
    { 
     int i=sel_fields.getSelectedIndex(); 
     f.addElement(sel_fields.getSelectedValue()); 
     sf.removeElementAt(sel_fields.getSelectedIndex()); 
     sel_fields.setSelectedIndex(i); 
    } 

} 

private void sel_fieldsValueChanged(javax.swing.event.ListSelectionEvent evt) { 
     System.out.println("fired"); 
} 
public static void main(String args[]) { 
    java.awt.EventQueue.invokeLater(new Runnable() { 

     public void run() { 
      new Jlistdemo().setVisible(true); 
     } 
    }); 
} 

private javax.swing.JList fields; 
private javax.swing.JButton jButton1; 
private javax.swing.JButton jButton2; 
private javax.swing.JScrollPane jScrollPane1; 
private javax.swing.JScrollPane jScrollPane2; 
private javax.swing.JList sel_fields; 
+0

歡迎來到SO :-)請注意,問題和答案預計將在這裏公開。不要指望任何人私下_send_你的任何代碼(如果那是你想要的,考慮聘請顧問:-) BTW:ANY1不是一個英文單詞據我所知,和粘問號可能被視爲喊... – kleopatra

回答

2

的錯誤是在你的構造以下行:

fields = new JList(f) 

與你更換名單即在的initComponents

+0

烏爾儀式....我發現錯誤....! thnk你...! – unknown

0

你從添加數據分離列表的創建創建。

,你不需要跟蹤選定字段,列表會爲你做的。

加,更好的名稱將有助於使代碼更清晰。

+0

對不起,我沒有得到你... Plz解釋我...... – unknown

+0

看看教程。從你的編碼開始小;直到它工作;然後逐漸增加使其更加複雜。 http://docs.oracle.com/javase/tutorial/uiswing/components/list.html –

+0

我已經檢查過它。但我找不到解決方案。你可以在這個程序中找到任何錯誤或錯誤......?因爲這是我的項目的一個模塊。 (報告生成器) – unknown