簡體   English   中英

JList在GUI中不顯示Object []

[英]JList not displaying Object[] in GUI

我正在運行正在偵聽特定端口的本地服務器。

在客戶端應用程序中,我正在運行一個GUI,該GUI將顯示新聞列表(由我創建的帶有標題和正文的對象)

我發送一個ArrayList作為參數,並將其添加到我的JList(ListNewsTitle)

public class GUI {

private Socket socket;
private Client client;
private JFrame Frame;
private JTextField TextSearch;
private JButton BtnSearch;
private JTextArea TextNewsBody;
private JList<News> ListNewsTitle;
private ArrayList<News> ListNews = new ArrayList<News>();

public GUI(Client client) throws FileNotFoundException {
    this.client = client;
    buildGUI();
}

private void buildGUI() throws FileNotFoundException {
    Frame = new JFrame();
    TextSearch = new JTextField();
    BtnSearch = new JButton("Search");
    TextNewsBody = new JTextArea();
    ListNewsTitle = new JList<News>();
    setFrame();
    setFields();
}



 //This method is called in the Client class.
        public void go(Socket socket, ArrayList<News> listNews) {
                this.socket = socket;
                this.ListNews = listNews;
                new ButtonAction(this);
                News[] news = new News[listNews.size()];
                listNews.toArray(news);
                System.out.println(news.length + " is the lenght of news");//displays the correct number.
            ListNewsTitle = new JList<News>(news);
            Frame.pack();
            Frame.setVisible(true);
        }

JList顯示在GUI中,但由於某種原因它會顯示為空。 由於JList使用toString()方法,因此我也對其進行了更改。

public News(String title, String body ) {
    this.title = title;
    this.body = body;
}

@Override
public String toString() {
    return title;
}

提前致謝。

當您這樣做時:

ListNewsTitle = new JList<News>(news);

您將使用新數據完全創建一個單獨的對象,現有列表保持不變(並且不再被該變量引用)。使用ListNewsTitle.setListData(news); ,您正在修改現有列表。

區別似乎很小,但非常重要。 當您替換列表時,引用現有列表的任何其他對象都不會更新其列表(因為它們的列表是您剛剛創建的對象的單獨對象。)當您設置現有列表的內容時列表,則引用該相同現有對象的任何對象都將看到其更新狀態。

在這種情況下,引用現有對象的對象包括GUI組件-因此,為了顯示更改,您需要修改現有列表,而不是創建新列表。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM