29. oktober 2004 - 11:46Der er
22 kommentarer og 1 løsning
JTabbedPane og Tabeller
Jeg har en applet med et JTappedPane. Et af fanebladene indeholder en tabel, der henter data fra en ekstern enhed vha. tcp/ip kommandoer. Det tager ca. 4 sekunder at hente disse kommandoer.
Som det er lige nu, oprettes tabellen i kompilleringsøjeblikket. Dette sker idet jeg skriver: errorWindow panel2 = new errorWindow(gtp); jTabbedPane1.addTab("Error", panel2);
Er det et eller andet jeg kan gøre, så tabellen først indlæser indholdet i tabellen i det øjeblik jeg bringer siden i fokus.
Måske i skal have lidt mere kode, så må I endelig sige til.
private void initComponents() { jTabbedPane1 = new javax.swing.JTabbedPane(); jTabbedPane2 = new javax.swing.JTabbedPane(); jTabbedPane3 = new javax.swing.JTabbedPane(); jTable1 = new javax.swing.JTable();
Min table content er i øvrigt bygget op således: public Object getValueAt( int row, int col ) { switch ( col ) { case 0: return time.elementAt(row); case 1: return no.elementAt(row); case 2: return text.elementAt(row); default: return null; } }
public class tableContent extends AbstractTableModel { Thread timer; tcpip gtp; String input_text = new String(""); Vector time = new Vector(); Vector no = new Vector(); Vector text = new Vector(); private String ColumnNames[] = { "Time", "No", "Text"};
// Data fyldes i de tre vektorer...
public String getColumnName( int col ) { return ColumnNames[col]; } public int getColumnCount() { return 3; }
public int getRowCount() { return time.size(); }
public Object getValueAt( int row, int col ) { switch ( col ) { case 0: return time.elementAt(row); case 1: return no.elementAt(row); case 2: return text.elementAt(row); default: return null; } }
--- Den her klasse laver layoutet med scroll og tabel
public class errorWindow extends Applet{ tcpip gtp; JButton jButton1 = new JButton(); JTable jTable1 = new JTable();
Mangler du i øvrigt ikke en metode i din tableContent, eller har du bare ikke pastet den public void setValueAt(Object aValue, int rowIndex, int columnIndex)
Den metode har jeg ikke - jeg har getValueat... Det er noget kode jeg har fundet et eller andet sted og tilpasset. Indlæser jeg dataene under opstart virker det dog - men jeg vil da prøve at implementere den nævnte metode...
Jeg ved ikke hvor langt du er nået, men her er et lille eksempel som jeg tror du næsten kan copy/paste eller nemt bygge sammen med din egen kode. Har lavet lidt sparsomme kommentarer.
public class TestTable extends javax.swing.JFrame {
public TestTable() { initComponents(); }
private void initComponents() { content = new tableContent(); jScrollPane1 = new javax.swing.JScrollPane(); table = new javax.swing.JTable(); jButton1 = new javax.swing.JButton();
jButton1.setText("Fyld tabel med data"); jButton1.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { fyldTabelMedData(evt); } });
getContentPane().add(jButton1);
pack(); }
// Her fyldes tabellen med data, prøv at bygge det sammen med din egen kode private void fyldTabelMedData(java.awt.event.ActionEvent evt) { for(int i = 0; i < 10; i++){ Vector v = new Vector(); v.add("1" + i + ":00"); v.add("" + i + ""); v.add("Line " + (i + 1)); content.addRow(v); } }
public static void main(String args[]) { java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new TestTable().setVisible(true); } }); }
Jeg nåede ikke særlig langt med det i går, det gik slet ikke... Så nu vil jeg med friske øjne kigge på dit eksempel - du hører fra mig hvordan det går, men uanset er du ihvertfald sikret de 200 point. Virkelig lækkert med al den hjælp!
Hmm - trykkede send for tidligt :) Størstedelen af koden er sortering af indkommen data:
void get_data(String command){ int i; int n=-1000; int j=0; int rowCount = content.getRowCount(); if (rowCount>0){ for (i = rowCount-1; i >= 0; i--) { content.removeRow(i); } } byte[] in; String tempTime = new String(""); String tempNo = new String(""); String tempText = new String("");
gtp.send_escape(); gtp.send(command); gtp.send_enter(); try { Thread.currentThread().sleep(4000); } catch (InterruptedException e) { } in = gtp.receive(); for (i = 8; i < in.length; i++) { if (in[i]==0x0D || in[i]==0x0a){ if (tempTime!= ""){ Vector v = new Vector(); v.add(tempTime); v.add(tempNo); v.add(tempText); content.addRow(v);
j++; } n = -1; tempTime = ""; tempNo = ""; tempText = ""; } if (n>=0 && n<=8){ tempNo += (char) in[i]; } if (n>=10 && n<=27){ tempTime += (char) in[i]; } if (n>=30){ tempText += (char) in[i]; }
Jeg kan ikke lige huske om det har nogen betydning at du har lille 'a' her if (in[i]==0x0D || in[i]==0x0a){ måske rettes til: if (in[i]==0x0D || in[i]==0x0A){
og her: if (tempTime!= ""){ // n skal være større end 1000 før denne er sand, når den det ???
og her: if (tempTime!= ""){ // in.length skal være større end 1000 før denne er sand , når den det ???
Synes godt om
Ny brugerNybegynder
Din løsning...
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.