01. oktober 2003 - 17:22Der er
16 kommentarer og 2 løsninger
Refresh JTable
Jeg har en applet med en JTable, når jeg trykket på en knap vil jeg have refreshet alle data i JTable'n.
Appletten laver tabellen ud fra en klasse: table = new ServerTable().getServerTable(); JScrollPane scrollPane = new JScrollPane( table );
Det virker ogå, men jeg kan ikke få den til at refreshe tabellen.
Har lagt en ActionListener på kanppen: refreshAllButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent as) { table = new ServerTable().getServerTable(); repaint(); } });
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
Jeg syntes jeg har været rundt over det hele nu, men alle steder skifter de hver enkelt celle, jeg vil skifte hele tabellen ud med nye objecter, faktisk lave en ny
Ok, tror jeg er ude i en go gang spagetti kode, men her komme den:
public class HLManager extends javax.swing.JApplet {
public void init() { initComponents(); }
/** Creates a new instance of HLManager */ public void initComponents() { //Jtable table = new ServerTable().getServerTable(); JScrollPane scrollPane = new JScrollPane( table );
javax.swing.table.TableColumn column = null; for (int i = 0; i < 7; i++) { column = table.getColumnModel().getColumn(i); switch(i) { case 0: column.setPreferredWidth(10); break;
case 1: column.setPreferredWidth(250); break;
case 3: column.setPreferredWidth(100); break;
case 4: column.setPreferredWidth(100); break;
default: column.setPreferredWidth(20); break; } }
refreshAllButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent as) { ServerTable tabel = new ServerTable(); //table = tabel.getServerTable(); //table.updateUI(); repaint(); } });
Og min Tabel klasse:
public class ServerTable extends AbstractTableModel implements TableModel { private final JTable table; private Vector headings; private int rowCount; private Vector servers;
public ServerTable() { headings = new Vector(); headings.add("OS"); headings.add("Name"); headings.add("Ping"); headings.add("Game"); headings.add("Map"); headings.add("Players"); headings.add("# buddies"); headings.add("Ip");
Men jeg tror jeg er nødt til at lave mig et klasse diagram, så jeg kan få styr på alle klasse inden jeg går igang, det kan laves 10 gange smartere end det jeg er i gang med nu 10.
Jeg har prøvet at følge eksemplet fra http://www.eksperten.dk/spm/327572 Jeg har en klasse som giver mig et objekt indeholdende en vector med x-antal vectorer, det burde ikke være noget problem at lave en JTable ud fra den. Når jeg trykker refresh skal den lave et nyt objekt med en vector med x-antal vectorer.
Jeg ville tro det bare var at sætte JTable tabel til at pege på et nyt objekt og fyre fireTableDataChanged() af. Men før jeg kan bruge fireTableDataChanged() skal tabellen være lavet som en AbstractTableModel med tilhørende metoder. Som jeg kan se det kan man ikke lige give AbstractTableModel en Vector og bede den lave en JTable, eller er jeg helt galt på den ?
Så fik jeg dte til at virke, startede helt forfra, fandt aldrig ud af hvor min fejl lå, men nu virker det. Gik væk fra Vectorer og brugte Object[][], det gjorde det lidt nemmere at opdatere en enkelt række. Mit probelm lå nok også i at det var en række tråde der fyldte i tabellen, og den kunne ikke tegnes før alle tråde var færtige. Det var ikke nødvendig med repaint(), fireTableDataChanged() var nok. Hvis conrad og _carsten smider et svar kan i få 5 point hver, ellers går de til magoo.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.