Lütfen aşağıdaki örneği çalıştırmayı deneyin ve özellikle bir satıra tıklarsanız, yeniden boyamanın neden zaman zaman başarısız olduğunu açıklamama açıklayın. JList, tercih edilen satırların boyutunu unutur gibi görünüyor. Bu kodu sabit intevaller olarak çalıştırırken, JList'in bazı rasgele aralıkları boş kaldığı anlamına gelir.JList nasıl yeniden yüklenir?
import javax.swing.JList;
import javax.swing.ListCellRenderer;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JFrame;
import javax.swing.BorderFactory;
import javax.swing.DefaultListModel;
import java.awt.Color;
import java.awt.Component;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.Timer;
import java.util.TimerTask;
class ListItem
{
private Color color;
private String value;
public ListItem(Color c, String s)
{
color = c;
value = s;
}
public Color getColor()
{
return color;
}
public String getValue()
{
return value;
}
}
class MyCellRenderer extends
JLabel implements ListCellRenderer
{
public MyCellRenderer()
{
setOpaque(true);
}
public Component getListCellRendererComponent(JList list,
Object value, // value to display
int index, // cell index
boolean iss, // is selected
boolean chf) // cell has focus?
{
System.out.println(" i cell-rendering "+CustomList.tid + " "
+ CustomList.model.getSize() + " " + index+" "+CustomList.statusList.getValueIsAdjusting() + " ");
setText(((ListItem)value).getValue());
setBackground(((ListItem)value).getColor());
if (iss)
{
setBorder(BorderFactory.createLineBorder(Color.blue, 1));
}
else
{
setBorder(BorderFactory.createLineBorder(list.getBackground(), 1));
}
return this;
}
}
public class CustomList
{
public static DefaultListModel model;
public static JList statusList;
public static int tid = 0;
public static void tidUr()
{
int delay = 1000;
int period = 1000;
Timer timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask()
{
public void run()
{
// model = new DefaultListModel();
// statusList.setModel(model);
// statusList.setCellRenderer(new MyCellRenderer());
model.clear();
tid++;
ListItem li = new ListItem(Color.cyan, "test line one "+tid);
model.addElement(li);
li = new ListItem(Color.yellow, "foo foo foo foo foo");
model.addElement(li);
li = new ListItem(Color.green, "quick brown fox");
model.addElement(li);
}
}, delay, period);
}
public static void main(String args[])
{
JFrame frame = new JFrame("Custom List Demo");
frame.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
}
);
model = new DefaultListModel();
statusList = new JList(model);
statusList.setCellRenderer(new MyCellRenderer());
ListItem li = new ListItem(Color.cyan, "test line one");
model.addElement(li);
li = new ListItem(Color.yellow, "foo foo foo foo foo");
model.addElement(li);
li = new ListItem(Color.green, "quick brown fox");
model.addElement(li);
JPanel panel = new JPanel();
panel.add(statusList);
frame.getContentPane().add("Center", panel);
frame.setLocation(300, 400);
frame.setSize(200, 200);
//frame.pack();
frame.setVisible(true);
// tidUr();
ActionListener actionListener = new ActionListener() {
public void actionPerformed(ActionEvent actionEvent) {
System.out.println("Hello World Timer");
model.clear();
tid++;
ListItem li = new ListItem(Color.cyan, "test line one "+tid);
model.addElement(li);
li = new ListItem(Color.yellow, "foo foo foo foo foo");
model.addElement(li);
li = new ListItem(Color.green, "quick brown fox");
model.addElement(li);
}
};
javax.swing.Timer t2 = new javax.swing.Timer(1000, actionListener);
t2.start();
}
}
Teşekkürler! Bu sorunu çözdü ve java.util.Timer öğesinin Swing – Hans
ActionListener actionListener = new ActionListener() { public void actionPerformed (ActionEvent actionEvent) { System.out.println ("Hello World Timer") ile birleştirilmesi için uygun olmadığını öğrendim. ; \t \t \t \t model.clear(); \t \t \t \t tid ++; \t \t \t \t ListItem li = new ListItem (Color.cyan, "test line one" + tid); \t \t \t \t model.addElement (li); \t \t \t li = new ListItem (Color.yellow, "foo foo foo foo foo"); \t \t \t \t model.addElement (li); \t \t \t li = new ListItem (Color.green, "hızlı kahverengi tilki"); \t \t \t \t model.addElement (li); } }; \t \t \t \t javax.swing.Timer t2 = new javax.swing.Timer (1000, actionListener); \t \t t2.start(); – Hans