2013-12-24 5 views
0

JList가 업데이트되지 않는 이유는 무엇입니까?Java JList 업데이트 중

목록 개체를 다시 인스턴스화합니다. 내가 다시 채우고 다시 확인해 봐. 왜 그래?

needmoredetailsneedmore

외부 클래스 :

   ControlPanel.usernames.add(username); 
      ControlPanel.list = new JList(ControlPanel.usernames.toArray()); 
      ControlPanel.panel.repaint(); 
      ControlPanel.panel.revalidate(); 

ControlPanel.java 당신은

대신 화면에 추가되지 않은 새로운 JList을 만든

package main; 

import java.awt.BorderLayout; 
import java.util.ArrayList; 

import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JList; 
import javax.swing.JPanel; 
import javax.swing.JScrollPane; 

@SuppressWarnings("serial") 
public class ControlPanel extends JFrame { 

public static JPanel panel = new JPanel(); 
JScrollPane scrollpane; 
static JLabel players; 
static String s; 
public static ArrayList<String> usernames = new ArrayList<String>(); 
public static JList list; 

// public static String categories[] = {}; 

public ControlPanel() { 
    list = new JList(usernames.toArray()); 
    scrollpane = new JScrollPane(list); 

    panel.add(scrollpane, BorderLayout.CENTER); 
    add(panel); 

    setTitle("RuneShadows CP"); 
    setSize(400, 400); 
    setResizable(false); 
    setDefaultCloseOperation(EXIT_ON_CLOSE); 
    setVisible(true); 
} 
} 
+0

[이 답변] 한 번 봐 (http://stackoverflow.com/를 취함으로써 ... 그것은 만 수행하는 것이,

시작을 정확히 새로 고침 작업을 신경 안 a/4262716/877472) 저는 완전히 새로운 JList를 만드는 대신 목록의 모델 객체를 사용하여 JList를 업데이트하는 방법을 보여줍니다. –

+0

우리에게 좀 더 친절하고 [SSCCE] (http://sscce.org)를 게시 할 수 없습니까? 비록 미친 프로그래머의 대답은 아래에 주어진 바와 같이 명백하다. – Sage

+1

감사합니다. 완벽하게 작동했습니다. – user3130731

답변

2

, 새 ListModel을 만들고 그것을 겁 솔직히입니다

ControlPanel.usernames.add(username); 
ControlPanel.list,setModel(new UserNamesListModel(ControlPanel.usernames)); 
ControlPanel.panel.repaint(); 
ControlPanel.panel.revalidate(); 

은 자세한 내용

액세스 모델 How to use lists를 참조 화면에 이미 년대 list의 모델이야. 어디서든 모든 양식에 완벽하게 액세스 할 수 있으므로 불쾌한 클래스가 UI를 완전히 해체 할 수 있습니다.

static을 사용하면 쉽게 액세스 할 수있는 솔루션이 아니며 시간이 지남에 따라 응용 프로그램의 유연성이 크게 저하됩니다.

외부 클래스가 class.eapqually에 포함되고 관리되는 정보에 액세스 할 수 있도록 간단하게 제공해야합니다. 다른 클래스에서 사용해야 할 관리 기능 (예 : refresh)을 클래스에 제공해야합니다.

아무도 How to use lists

import java.util.ArrayList; 
import java.util.List; 
import javax.swing.AbstractListModel; 

public class UserNamesListModel extends AbstractListModel<String> { 

    private List<String> userNames; 

    public UserNamesListModel(List<String> userNames) { 
     this.userNames = new ArrayList<>(userNames); 
    } 

    @Override 
    public int getSize() { 
     return userNames.size(); 
    } 

    @Override 
    public String getElementAt(int index) { 
     return userNames.get(index); 
    } 

} 
+0

죄송 합니다만 ListModel에 익숙하지 않습니다. 예제를 제공해 주시겠습니까? 나는 ListModel을 가지고있다. lm = new DefaultListModel(); JList list = new JList (lm) – user3130731

+0

UserNamesListModel을 대체 할 항목을 찾지 못했습니다. 나는 ArrayList와 JList를 시도했다. – user3130731