Double Buffering bei JTable

Status
Nicht offen für weitere Antworten.

l.locke

Mitglied
Hi,

so eine JTable zeigt ja eintrage an, bei ist es Text und das ganze ist ja in Zeilen und Spalte aufgeteilt. Nun habe ich bei anfügen von Zeile ein flackern und verwsuchte das mit Double Buffering wegzubekommen allerdings scheint es so als würde die Tabelle gar nicht in die update methode gehen! Nun bekommt diese Methode ja eine Grafik und ich habe ja nur Text was angezeigt werden soll, kann man das trotzdem irgendwie realiesieren!

Danke
 

L-ectron-X

Gesperrter Benutzer
Ich schreibe auch gerade an einem Programm mit einer JTable, in die Daten an- und eingefügt oder Zeilen gelöscht werden. Ich habe dabei aber nie ein Flackern bemerkt. Vielleicht kannst Du ja mal etwas Code posten.
 
G

Guest

Gast
Das ist die Klasse die die neuen Daten aus der DB ausliest und dann weitergibt! Das problem denke ich ist das, es in 2-3 sekunden 20-30 neue Zeilen seien können!

Code:
import java.sql.*;
import java.text.*;
import java.util.*;

class TailMode extends Thread
{
   private int LastID=0, LastRow=0;
   private String select="", tab="", TailWhere;
   private String[] where;
   private DBread dbr;
   private Statement st;
   private ResultSet rs;
   private Object[] udp_sport, udp_dport;
   private ListenTable table;
   private Object[][] ProtocolNames;

   TailMode(int LastRow, String select, DBread dbr, ListenTable table)
   {
      super();
      this.select=select;
      this.LastRow=LastRow;
      this.table=table;
      this.dbr=dbr;
      this.tab=dbr.getTable();
      try{  st=dbr.getConnection().createStatement();    }
      catch(Exception e){ System.out.println(e); }

      this.setDaemon(true);
      this.setPriority( Thread.NORM_PRIORITY );
   }

//---------------------------------------------------------------------------------------

   public void setStatement(String select)
   {
      this.select=select;
   }

//---------------------------------------------------------------------------------------

   public void setLastRow(int lastrow)
   {  this.LastRow=lastrow;          }

//---------------------------------------------------------------------------------------

   public void setProtocolNames(Object[][] PN)
   {  this.ProtocolNames=dbr.getProtocolNames();  }

//---------------------------------------------------------------------------------------

   public void run()
   {

      while( !this.interrupted()  )
     // for( int z=0; z<3; z++)
      {
         String TailSelect="";
         try
         {
            //this is to find out how many Rows are in the table
            rs=st.executeQuery("SELECT count(*) FROM "+tab);

            rs.first();
            LastID = rs.getInt(1);
         }
         catch(Exception exc){ System.out.println("class:TailMode, Method:run() countRows "+exc);  }

         if( select.endsWith("WHERE") )
         {
            where=select.split("WHERE");
            TailWhere="";
         }
         else
         {
            where=select.split("WHERE");
            TailWhere=where[1];
         }

         if( !TailWhere.matches(".*id.*") )
         {
            if( !select.endsWith("WHERE") )
            {  TailWhere=TailWhere+" AND id BETWEEN "+(LastRow+1)+" AND "+LastID; }
            else
            {  TailWhere=" id BETWEEN "+(LastRow+1)+" AND "+LastID;  }
         }

         try
         {
            if( select.matches(".*tcp_sport.*"))
            {
               rs=st.executeQuery("SELECT udp_sport FROM "+tab+" WHERE "+TailWhere);

               //this is to find out how many row´s are in the resultset
               rs.last();
               int AnzRowInRS=rs.getRow();
               rs.beforeFirst();

               udp_sport=new Object[AnzRowInRS];

               int k=0;
               while(rs.next())
               {   udp_sport[k]=rs.getString(1);     k++;  }
            }

            if(select.matches(".*tcp_dport.*"))
            {
               rs=st.executeQuery("SELECT udp_dport FROM "+tab+" WHERE "+TailWhere);

               //this is to find out how many row´s are in the resultset
               rs.last();
               int AnzRowInRS=rs.getRow();
               rs.beforeFirst();

               udp_dport=new Object[AnzRowInRS];

               int k=0;
               while(rs.next())
               {   udp_dport[k]=rs.getString(1);     k++;  }
            }

            //create the new FW access infos for the new entry´s
            int i=0;
            rs=st.executeQuery("SELECT oob_prefix FROM devil WHERE "+TailWhere);

            //this is to find out how many row´s are in the resultset
            rs.last();
            int AnzRowInRS=rs.getRow();
            rs.beforeFirst();

            int[] AccessInfo=new int[AnzRowInRS];
            while(rs.next())
            {
               if(rs.getString(1).startsWith("DROP"))
               {  AccessInfo[i]=-1;             }
               else if(rs.getString(1).startsWith("ACCEPT"))
               {  AccessInfo[i]=1;              }

               i++;
            }
            ((ColoredTableCellRenderer)table.getCellRenderer(1, 1)).addAccessInfo(AccessInfo);

         }
         catch(Exception exc){ System.out.println("class:TailMode, Method:run() needed Info "+exc);  }


         try
         {
            rs=st.executeQuery(where[0]+" WHERE "+TailWhere);
            ResultSetMetaData rsmd=rs.getMetaData();
            Object[] OrgTableColumnNames=dbr.getOrgTableColumnNames();

            //this is to find out how many row´s are in the resultset
            rs.last();
            int AnzRowInRS=rs.getRow();
            rs.beforeFirst();

            Object[][] newData=new Object[AnzRowInRS][rsmd.getColumnCount()];

            int j=0;
            while(rs.next())
            {

               for(int k=0; k<rsmd.getColumnCount(); k++)
               {
                  newData[j][k]=rs.getString(k+1);
                  if(!rs.wasNull())
                  {
                     if(((String)OrgTableColumnNames[k]).equals("ip_saddr") || ((String)OrgTableColumnNames[k]).equals("ip_daddr"))
                     {
                        //Aufruf zum umwandeln der "Verschlüsselten" IP-Adresse in Standard Format
                        newData[j][k] =dbr.getIPfromLong(rs.getLong(k+1));
                     }
                     else if(((String)OrgTableColumnNames[k]).equals("oob_time_sec"))
                     {
                        long timeAslong=rs.getLong(k+1);
                        newData[j][k] =new Time(timeAslong*1000).toString();
                     }
                     else if(((String)OrgTableColumnNames[k]).equals("raw_mac"))
                     {
                        newData[j][k] =rs.getString(k+1).substring(18,35);
                     }
                     else if(((String)OrgTableColumnNames[k]).equals("ip_protocol"))
                     {
                        if( ProtocolNames.length>0 )
                        {
                           for(int i=0; i<ProtocolNames.length; i++)
                           {
                              if(rs.getString(k+1).equals(ProtocolNames[i][0]))
                              {   newData[j][k] =ProtocolNames[i][1];   }
                           }
                        }
                        else
                        {  newData[j][k] =rs.getString(k+1);  }
                     }
                     else if(((String)OrgTableColumnNames[k]).equals("ip_ihl"))
                     {  newData[j][k] =new Integer(rs.getInt(k+1)*4).toString();   }
                     else
                     {  newData[j][k] =rs.getString(k+1);                          }
                  }
                  else if(((String)OrgTableColumnNames[k]).equals("tcp_sport"))
                  {
                     newData[j][k] =udp_sport[j];
                  }
                  else if(((String)OrgTableColumnNames[k]).equals("tcp_dport"))
                  {
                     newData[j][k] =udp_dport[j];
                  }
                  else  if(((String)OrgTableColumnNames[k]).equals("date"))
                  {
                     long dateAslong=rs.getLong(k+2);
                     if(dateAslong!=0)
                     {  java.util.Date date=new java.util.Date(dateAslong*1000);
                        String dateString = DateFormat.getDateInstance().format(date);
                        newData[j][k] =dateString;
                     }
                     else
                     {  newData[j][k]="";  }
                  }

               }
               j++;

            }
            if( newData.length!=0 )
               {   Vector v=((NotEditableTableModel)table.getModel()).ConvertToVector(newData);
                  ((NotEditableTableModel)table.getModel()).addRow(v);
                 // ((NotEditableTableModel)table.getModel()).removeRow(0);
               }
            LastRow=LastID;

         }
         catch(Exception ex){ System.out.println("class:TailMode, Method:run() writeData"+ex); }

      }
   }
}
 

L-ectron-X

Gesperrter Benutzer
Ich glaube, da hat deathbyaclown schon mal eine Vermutung geäußert, die ich gar nicht mal so abwegig finde.
Die Tabelle ist ja nur mit zeichnen beschäftigt, das könnte eventuell der Auslöser für das Flackern sein.
Wird die Datenbank mit der Tabelle überwacht, quasi in echtzeit ständig ausgelesen? Oder liest Du einmal die Daten Zeilen weise aus der Datenbank und fügst jede ausgelesene Zeile aus der Datenbank sofort in Deiner Tabelle an?
 
G

Guest

Gast
NIcht die Tabelle an sich überwacht die DB, sonder die Klasse die ich gepostet habe. Und diese Liest alle neuen Zeilen auf einmal aus und gibt sie einzelnd dann an die Tabelle. Das es an dem ständigem neuzeichen leigt dacht ich mir ja auch schon. Aber ich muss ja aktualiesiern und die Funktion setIgnoreRepaint( boolean ) oder so ähnlich hatte bei mir leider keinen Effekt! Ein JPanel hat ja auch die Double Buffering eigenschaft, nur die Tabelle leider nicht!
Aber ich wär froh über neu ansätze!
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
V Applet Double Buffering AWT, Swing, JavaFX & SWT 2
T 2D-Grafik Double Buffering AWT, Swing, JavaFX & SWT 7
lumo SWT Double Buffering AWT, Swing, JavaFX & SWT 5
K Flackern trotz Double-Buffering AWT, Swing, JavaFX & SWT 10
hdi Wie implementiere ich Double Buffering AWT, Swing, JavaFX & SWT 12
G Frage zu Double Buffering AWT, Swing, JavaFX & SWT 4
U Double Buffering AWT, Swing, JavaFX & SWT 6
J Double-Buffering zu langsam AWT, Swing, JavaFX & SWT 4
L Double-Buffering AWT, Swing, JavaFX & SWT 2
D double Buffering abschalten? AWT, Swing, JavaFX & SWT 4
CptK Point2D.Double Kurven - Beschriftung und richtiges Anklicken AWT, Swing, JavaFX & SWT 7
CptK Wie funktioniert contains() für Path2D.Double AWT, Swing, JavaFX & SWT 10
B AWT GUI nimmt nur 19 Ziffern an, obwohl Max Wert von Double größer ist AWT, Swing, JavaFX & SWT 7
T Swing Double Click bei Buttons in JTable AWT, Swing, JavaFX & SWT 9
L 2D-Grafik Frage zu Ellipse2D.Double, Abfrage, ob Punkt enthalten ist funktioniert nicht AWT, Swing, JavaFX & SWT 3
S Polygon mit double-Koordinaten AWT, Swing, JavaFX & SWT 2
N Double Buffern von BILDERN AWT, Swing, JavaFX & SWT 6
B Graphics2d drawString mit double Werten? AWT, Swing, JavaFX & SWT 5
O 2D-Grafik Rectangle mit double Werten zeichnen AWT, Swing, JavaFX & SWT 3
M Object[][] in double[][] casten AWT, Swing, JavaFX & SWT 6
A aus einem Textfeld in double parsen AWT, Swing, JavaFX & SWT 10
J JSlider mit Double Werten AWT, Swing, JavaFX & SWT 5
T JTextField nur Double werte eingeben AWT, Swing, JavaFX & SWT 2
A Explicit casting Point2D.Double AWT, Swing, JavaFX & SWT 3
A TableRowSorter für double Werte mit Formatierung AWT, Swing, JavaFX & SWT 3
iLoveTheInternet AWT Rectangle2D.Double intersecs AWT, Swing, JavaFX & SWT 6
R drawString mit double Koordinaten AWT, Swing, JavaFX & SWT 5
L JTextField Umwandeln in double-Werte AWT, Swing, JavaFX & SWT 5
K double / int einlesen? AWT, Swing, JavaFX & SWT 12
L double in JTable formatieren AWT, Swing, JavaFX & SWT 7
P Integer, Double, etc mit getTableCellRendererComponent AWT, Swing, JavaFX & SWT 6
P Double-Werte sortieren mit TableRowSorter AWT, Swing, JavaFX & SWT 2
B JFormattedTextField mit DecimalFormat in ein Double AWT, Swing, JavaFX & SWT 11
S double in String umwandeln AWT, Swing, JavaFX & SWT 6
R Double in der Tabelle statt String und Integer AWT, Swing, JavaFX & SWT 3
Student "Dicke" einer Linie - Line2D.Double AWT, Swing, JavaFX & SWT 12
G Double-Click f. alle Komps UNIX u. WIN verschieden ? AWT, Swing, JavaFX & SWT 5
G Ellipse2D.Double funktioniert nicht AWT, Swing, JavaFX & SWT 3
W SWT - Tree: Problem mit Double-Click expand AWT, Swing, JavaFX & SWT 5
K AWT flackern trotz buffering AWT, Swing, JavaFX & SWT 4
J Drag und drop aus einer JTable - bitte um Unterstützung AWT, Swing, JavaFX & SWT 2
S HPRO und UPRO gemeinsame JTABLE gemeinsamer RENDERER ? AWT, Swing, JavaFX & SWT 1
F Swing JTable - MultiHeader inkl. Eingabemöglichkeit AWT, Swing, JavaFX & SWT 1
S JTable - Feldinhalte anzeigen AWT, Swing, JavaFX & SWT 15
D Swing JTable Spaltenbreite AWT, Swing, JavaFX & SWT 1
W Gibt es einen "automatischen Listener" in Swing oder JTable oder der ATM-Klasse? AWT, Swing, JavaFX & SWT 14
G jTable - getSelectedRow() AWT, Swing, JavaFX & SWT 3
I JTable mit einem Button zu einer Detail Seite springen AWT, Swing, JavaFX & SWT 4
P JTable Listener für die Änderung einzelner Zellen oder Rows AWT, Swing, JavaFX & SWT 2
D Tastaturabfragen CTRL+t, CTRL+E bei eine JTable, bestehend aus JTextAteas AWT, Swing, JavaFX & SWT 4
P Checkboxes in JTable nicht editable AWT, Swing, JavaFX & SWT 9
F Best-Practise: JTable Text in Zelle zu groß AWT, Swing, JavaFX & SWT 2
izoards JTable in CSV File schreiben... AWT, Swing, JavaFX & SWT 23
Kohl Jedes Objekt einer JTable um ein Zeichen verkürzen AWT, Swing, JavaFX & SWT 7
I JTable, DefaultTableModel, zwei Zahlen multiplizieren. AWT, Swing, JavaFX & SWT 26
M JTABLE / wie oft wurde gewürfelt. AWT, Swing, JavaFX & SWT 1
F JTable vergrößern AWT, Swing, JavaFX & SWT 2
H JTable: Diverse NullPointer-Exceptions zur Laufzeit AWT, Swing, JavaFX & SWT 3
J Swing Werte des JTable werden nicht angezeigt AWT, Swing, JavaFX & SWT 9
T Swing JTable cellRenderer mit jpg Hintergrundfarbe lässt sich nicht ändern. AWT, Swing, JavaFX & SWT 1
HoT Einzelne Zelle in JTable Rahmen unten setzen AWT, Swing, JavaFX & SWT 24
B JTable Zellen zusammenfügen AWT, Swing, JavaFX & SWT 3
M Swing Cell Renderer für Zeilenumbruch in JTable AWT, Swing, JavaFX & SWT 0
H JTable im JSplitPane darstellen AWT, Swing, JavaFX & SWT 2
MadMax2506 Swing JTable lädt sehr lange AWT, Swing, JavaFX & SWT 1
D Zeilenumbruch in einer JTable AWT, Swing, JavaFX & SWT 9
R Swing JTable und Spaltenausrichtung AWT, Swing, JavaFX & SWT 8
G JTable füllen AWT, Swing, JavaFX & SWT 1
H JTable TableCellEditor-Problem AWT, Swing, JavaFX & SWT 0
W Swing JTable Zeilenumbruch innerhalb einer Zelle AWT, Swing, JavaFX & SWT 3
J Datensatz in jTable ausgeben AWT, Swing, JavaFX & SWT 3
M Swing Automatischer Editorstart in JTable-Zelle AWT, Swing, JavaFX & SWT 5
ralfb1105 Swing JTable aktualisieren AWT, Swing, JavaFX & SWT 5
adiko01 JTable: Nur markierte Zeilen aus der Tabelle in CSV exportiern AWT, Swing, JavaFX & SWT 9
M JTable.setDefaultRenderer(...) greift nicht AWT, Swing, JavaFX & SWT 0
J JTable: Eingabe in Tabellenzelle korrigieren AWT, Swing, JavaFX & SWT 4
T Problem mit JTable Sortierung AWT, Swing, JavaFX & SWT 2
D JTable nach INSERT aktualisieren /refreshen AWT, Swing, JavaFX & SWT 1
D MySQL Daten in JTable anzeigen AWT, Swing, JavaFX & SWT 2
H Swing Jtable extra spalte AWT, Swing, JavaFX & SWT 6
S Swing Rechteck über JTable zeichnen (per MouseListener) AWT, Swing, JavaFX & SWT 1
S Swing Mal wieder JTable Ansicht aktualisieren AWT, Swing, JavaFX & SWT 10
A JTable mit Daten füllen AWT, Swing, JavaFX & SWT 1
VfL_Freak Swing Einzelne Zeile in jTable selektieren klappt nicht AWT, Swing, JavaFX & SWT 7
N AWT jTable CellRenderer AWT, Swing, JavaFX & SWT 6
T Swing JTable valueChanged datensatz löschen AWT, Swing, JavaFX & SWT 1
0 Swing JTable aus anderer Klasse updaten AWT, Swing, JavaFX & SWT 5
S Jtable defaultRenderer wohin damit ? AWT, Swing, JavaFX & SWT 23
T Swing JTable / FocusListener AWT, Swing, JavaFX & SWT 0
it_is_all Warum wird die JTable im JDialog nicht angezeigt? AWT, Swing, JavaFX & SWT 1
L Swing JTable im Panel darstellen AWT, Swing, JavaFX & SWT 8
J addRow bei JTable AWT, Swing, JavaFX & SWT 6
M Jtable gibt -1 wert bei selectedRow und Column AWT, Swing, JavaFX & SWT 3
Meeresgott Swing JTable AWT, Swing, JavaFX & SWT 4
J JTable Selection Listener funktioniert nicht AWT, Swing, JavaFX & SWT 4
C Swing Daten in JTable wiedergeben per TableModel und MVC Pattern AWT, Swing, JavaFX & SWT 16
Z Swing Drag&Drop zwischen JTable und JTree AWT, Swing, JavaFX & SWT 4
Thallius JTable dynamisch Spaltenanzahl verändern AWT, Swing, JavaFX & SWT 2
Thallius JTable dynamisch laden? AWT, Swing, JavaFX & SWT 2
B Swing JTable sortieren AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben