06. marts 2003 - 12:49
Der er
3 kommentarer og
1 løsning
Oppdatere en JList
Hei.
Jeg har laget en JList som ikke inneholder noen elementer.
String data[] = new String[100];
Panel listPanel2 = new Panel();
JList liste = new JList(data);
listPanel2.add(liste);
add(listPanel2, "East");
Så ønsker jeg å fylle listen med data. Jeg har laget en ny data[] med innhold. Men hvordan får jeg oppdatert listen? Må jeg bruke
liste = new JList(data);
eller finnes det noe annet som ex.
liste.add.....
Hilsen Anders
06. marts 2003 - 13:39
#1
Hvis du vil arbejde på listens indhold skal du bruge listens model. En JList bruger ligesom mange andre Swing komponenter på Model View Controller. Hvis du vil fjerne en listes komponenter bruger du:
list.getModel().removeAllElements();
Hvis du vil tilføje elementer:
list.getModel().addElement(Object element);
Se også dette eksempel, hvor jeg har en instans af JListens model, som jeg arbejder på hver gang noget indhold i listen skal ændres. På den måde er du fri for at kalde list.getModel() hver gang. Du kan højreklikke på elementer i listen for at se info om dem.
// TestFrame.java:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.io.*;
public class TestFrame extends JFrame {
private DefaultListModel model;
private JList guiListe;
private ArrayList liste;
private JPopupMenu popup;
public TestFrame() {
super("Test");
setSize(400,400);
liste = new ArrayList();
liste.add(new Element("Element1"));
liste.add(new Element("Element2"));
liste.add(new Element("Element3"));
liste.add(new Element("Element4"));
liste.add(new Element("Element5"));
liste.add(new Element("Element6"));
liste.add(new Element("Element7"));
liste.add(new Element("Element8"));
model = new DefaultListModel();
for( int i = 0; i < liste.size(); i++ ) {
model.addElement(liste.get(i));
}
guiListe = new JList(model);
guiListe.addMouseListener(new PopupListener());
popup = new JPopupMenu();
JMenuItem showItem = new JMenuItem("Vis");
showItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
showItem();
}
});
JMenuItem deleteItem = new JMenuItem("Slet");
deleteItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
deleteItem();
}
});
popup.add(showItem);
popup.add(deleteItem);
getContentPane().add(new JScrollPane(guiListe));
}
private void showItem() {
Element element = (Element)model.get(guiListe.getSelectedIndex());
JOptionPane.showMessageDialog(this, element.getNavn());
}
private void deleteItem() {
int index = guiListe.getSelectedIndex();
model.remove(index);
liste.remove(index);
}
private class PopupListener extends MouseAdapter {
public void mousePressed(MouseEvent e) {
maybeShowPopup(e);
}
public void mouseReleased(MouseEvent e) {
maybeShowPopup(e);
}
public void mouseClicked(MouseEvent e) {
maybeShowPopup(e);
}
public void maybeShowPopup(MouseEvent e) {
if (e.isPopupTrigger()) {
Point point = new Point(e.getX(), e.getY());
int index = guiListe.locationToIndex(point);
if( index > -1 ) {
guiListe.setSelectedIndex(guiListe.locationToIndex(point));
popup.show(e.getComponent(), e.getX(), e.getY());
}
}
}
}
private class Element implements Serializable {
private String navn;
public Element(String navn) {
this.navn = navn;
}
public String getNavn() {
return navn;
}
public void setNavn(String navn) {
this.navn = navn;
}
public String toString() {
return navn;
}
}
}
class Go {
public static void main(String[] args) {
new TestFrame().show();
}
}