2013-03-28 61 views
0

我有2個窗口。一個拿到了一個空的JList,另一個拿到了一個按鈕。所以我想在按下按鈕時將值添加到列表中。這裏是我的代碼,但尚未完成:如何從其他窗口添加項目到JList

窗口1個

final DefaultListModel<String> favouriteNames = new DefaultListModel<String>(); 
JList namesList = new JList(favouriteNames); 

窗口2

public class button extends JFrame { 

private JList namesList; 
private DefaultListModel<String> favouriteNames; 

this.namesList = namesList; 

JButton addThis = new JButton("Add"); 
addThis.addActionListener(new ActionListener(){ 
    public void actionPerformed(ActionEvent e) { 
      favouriteNames.addElement("Jack"); 
    } 
}); 
} 
} 

回答

3

在構造函數中傳遞您的DefaultListModel的一個實例窗口2。

編輯添加:這是如何在構造函數中傳遞實例。

import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.DefaultListModel; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.SwingUtilities; 

public class ButtonFrame implements Runnable { 

    private JFrame    frame; 

    private DefaultListModel favouriteNames; 

    public ButtonFrame(final DefaultListModel favouriteNames) { 
     this.favouriteNames = favouriteNames; 
    } 

    @Override 
    public void run() { 
     frame = new JFrame(); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     JButton addThis = new JButton("Add"); 
     addThis.addActionListener(new ActionListener() { 
      @Override 
      public void actionPerformed(ActionEvent e) { 
       favouriteNames.addElement("Jack"); 
      } 
     }); 

     frame.add(addThis); 
     frame.pack(); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new ButtonFrame(new DefaultListModel())); 
    } 

} 
+0

感謝您的答覆。不知道該怎麼做,但這裏是我的想法和錯誤:'Window1 favouriteNames;'和動作監聽器我得到addElement得到突出顯示,這是錯誤:方法addElement(字符串)未定義類型框架。 –

+0

@AlexJj:查看我更新的答案。 –

+0

謝謝你的回覆和時間。但它不起作用。當我按下按鈕時沒有任何反應。沒有任何錯誤,但沒有添加到列表中。 –

0

我做了我的程序的簡化版本,但仍然有一個問題,我相信的actionPerformed發送數據,但JList中無法識別,或基本上還是沒想到接受它。所以這是我迄今爲止所做的。所以我的研究和嘗試有點多,也許它提供了更多關於這個問題的細節。

主窗口:

public class main { 

    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 
     // TODO Auto-generated method stub 
     JFrame frame = new ClassA(); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setVisible(true); 

    } 

} 

ClassA的:

public class ClassA extends JFrame { 

     DefaultListModel<String> myList; 
     JList list; 

     public ClassA() { 

     setSize(300,200); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     JPanel panel = new JPanel(); 
     panel.setLayout(new GridLayout(2,1)); 

     myList = new DefaultListModel<String>(); 
     list = new JList(myList); 


     //ClassB sendsText = new ClassB(myList, list); 

     JButton find = new JButton("Find"); 
     find.addActionListener(new ActionListener(){ 

      public void actionPerformed(ActionEvent e) { 
       new ClassB().setVisible(true); 
      } 

     }); 


     add(panel); 
     panel.add(find); 
     panel.add(list); 
    } 

} 

ClassB的:

public class ClassB extends JFrame { 

    DefaultListModel<String> myList; 
    JList list; 
    public ClassB(DefaultListModel<String> myList, JList list){ 
     this.myList = myList; 
     this.list = list; 
    } 


    public ClassB() { 
     setSize(300,200); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     JPanel panel = new JPanel(); 
     panel.setLayout(new GridLayout(2,1)); 

     JButton addMe = new JButton("Add Me"); 
     addMe.addActionListener(new ActionListener(){ 

      public void actionPerformed(ActionEvent e) { 
       myList.addElement("Danial"); 

      } 

     }); 

     add(panel); 
     panel.add(addMe); 
    } 

}