Swing Bestimmte Berechnung von Spalten durchführen und dann die Zeilen nach bestimmten Kriterien einfärben

Dino264

Mitglied
Hallo liebe Community,

ich hoffe ihr könnt mir weiter helfen. Ich weiß es gab zu diesem Thema schon mehrere Posts doch, leider hat mir keiner davon bei der Lösung meines Problems geholfen.

Und zwar habe ich mir durch ein Skript von einem Orcale Server eine Tabelle auslesen lassen. Diese Tabelle habe ich nun in einer JTable ausgeben lassen.

Nun fängt mein Problem an.
Ich möchte zwei Spalten subtrahieren. Und zwar möchte ich eine Start-Zeit von einer End-Zeit abziehen um die gesamt Zeit zu ermitteln.

Die Spalte in der die Start-Zeit steht heißt Start-Zeit. Die End-Zeit Spalte heißt End-Zeit Spalte.

Das Problem ist das in den Spalten zuerst das Datum und dann die Uhrzeit steht. So sieht das dann aus: tt.mm.jjjj St.mm.se.

Die ganzen Zeilen sollen dann eingefärbt werden je nachdem ob das Ergebnis <, > oder = einer anderen Zahl ist

Leider weiß ich gar nicht wo ich da anfangen soll geschweige den wie ich das machen muss.

Ich poste euch nochmal meine 2 Klassen dazu.

Das ist die Klasse die die Tabelle ausliest und in einer JTable ausgibt:

Java:
package Test;

import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Vector;

import oracle.jdbc.*;
import oracle.jdbc.pool.OracleDataSource;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;


public class Sqlselection  implements ActionListener {
   	
	private static final String EXIT_ON_CLOSE = null;

	@Override
	public void actionPerformed(ActionEvent e) {
		
//	  public final static Vector COLUMN_IDENTIFIERS = new Vector() 
//	     {
//       add("id");
//       add("name");
//       add("dateOfBirth");
//       add("balance");
//   };
//};

         try
         {
            OracleDataSource ods = new OracleDataSource();
            ods.setUser("*******");
            ods.setPassword("*******");
            ods.setURL("jdbc:oracle:thin:@*********************************");
            OracleConnection con = (OracleConnection)(ods.getConnection ());

            Statement s1 = con.createStatement();

            ResultSet rs = s1.executeQuery("select * from *****************");
//           JTable table = new JTable(buildTableModel(rs));
            table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
//          TableColumn tm = table.getColumnModel().getColumn(0);
//          tm.setCellRenderer(new MyColumnRenderer());
          
//          Table.setDefaultRenderer( Object.class, new DefaultTableCellRenderer() {
//          TableColumn tm = table.getRowModel().getRow(0);

            JOptionPane.showMessageDialog(null, new JScrollPane(table));
            
            DefaultTableCellRenderer ren = new myclass();
               table.setDefaultRenderer(Object.class, ren);
             
            
           if(rs!=null)
           {
        	   while (rs.next())
               {
//                	System.out.println("concole, jjd, 34785, Hallo, ");
                	System.out.printf(
                		"%s, %s, %s, %s, %s, %s, %s, %s, %s, %s%n",
                		rs.getString(1), 
		               	rs.getString(2),
		                rs.getString(3),
		                rs.getString(4),
		                rs.getString(5),
		                rs.getString(6),
		                rs.getString(7),
		                rs.getString(8),
		                rs.getString(9),
		                rs.getString(10),
		                rs.getString(11)
                	 );
                }
            }
         }
         catch (Exception e2)
         {
            e2.printStackTrace();
         }        	 
	}


//	@SuppressWarnings("null")
	private static DefaultTableModel buildTableModel(ResultSet rs)
	        throws SQLException {
		
	    JTable table;
	    DefaultTableModel defaultTableModel = null;
	    
	    ResultSetMetaData metaData = rs.getMetaData();

		    
	    setDefaultCloseOperation(EXIT_ON_CLOSE);
//	    defaultTableModel.setColumnIdentifiers(COLUMN_IDENTIFIERS);
	    table = new JTable(defaultTableModel);
        table.setEnabled(false);
	    
	    
	    // names of columns
	    Vector<String> columnNames = new Vector<String>();
	    int columnCount = metaData.getColumnCount();
	    for (int column = 1; column <= columnCount; column++) {
	        columnNames.add(metaData.getColumnName(column));
	    }

	    // data of the table
	    
//	    defaultTableModel.setColumnIdentifiers(COLUMN_IDENTIFIERS);
	    
	    
	    Vector<Vector<Object>> data = new Vector<Vector<Object>>();
	    
	    while (rs.next()) {
	        Vector<Object> vector = new Vector<Object>();
	        for (int columnIndex = 1; columnIndex <= columnCount; columnIndex++) {
	            vector.add(rs.getObject(columnIndex));
	        }
	        data.add(vector);
	    }

	    return new DefaultTableModel(data, columnNames);

	}
	
		
	private static void setDefaultCloseOperation(String exitOnClose) {
		// TODO Auto-generated method stub
		
	}
	
}


Das ist die Klasse in der ich angefangen habe einen TableCellRenderer zu bauen aber ich komme einfach nicht weiter.

Java:
package Test;

import java.awt.Color;
import java.awt.Component;

import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;

public class myclass extends DefaultTableCellRenderer {

	private static final int VALIDATION_COLUMN = 4;  
	  public Component getTableCellRendererComponent(  JTable table, Object value, boolean isSelected, boolean hasFocus,int row,int col)
	  {
	      Component comp = super.getTableCellRendererComponent(table,  value, isSelected, hasFocus, row, col); 
	      String s =  table.getModel().getValueAt(row, VALIDATION_COLUMN ).toString();
	 
	        if(s.equalsIgnoreCase("1")) 
	       {
	            System.out.println("Open");
	            comp.setBackground(Color.RED);
	       }
	       return( comp );
	   } 
	}
	 
	
	
	
	
//	public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
//	{
//		
//		super.getTableCellRendererComponent (table, value, isSelected, hasFocus, row, column);
//		double TRANSFER_TO_UGIS_DONE = Double.parseDouble(String.valueOf(value));
//		setForeground(Color.BLACK);            
//		if (TRANSFER_TO_UGIS_DONE < 5)
//	{                
//		setForeground(Color.RED);            
//		}
//	    return this;      
//	}
//
//	public static void setDefaultRenderer(Class<Object> class1,
//			DefaultTableCellRenderer defaultTableCellRenderer) {
//		 TODO Auto-generated method stub
//		
//	}


	
	//	Component component = super.getTableCellRendererComponent( table, value, isSelected, hasFocus, row, column);
//		int TRANSFER_TO_UGIS_DONE = ((Integer) table.getModel().getValueAt(row, 1 )).intValue();

//		if( TRANSFER_TO_UGIS_DONE == 1 )
//		{
//			component.setBackground(Color.yellow);
//		}
//		else
//		{
//			component.setBackground(Color.cyan);
//		}
//		return component;
//	}
//
//	public static void setDefaultRenderer(Class<Object> class1,
//			DefaultTableCellRenderer defaultTableCellRenderer) {
//		 TODO Auto-generated method stub
//		
//	}


Würde mich um schnelle Hilfe freuen denn eigentlich muss ich morgen damit fertig sein.
Würde mich freuen wenn ihr mir die Lösung direkt in meinen Code schreiben könntet.

Vielen Dank euch schon mal. Hoffe ich könnt mir helfen.

MfG

Dino264
 

Androbin

Bekanntes Mitglied
Dino264 hat gesagt.:
Das Problem ist das in den Spalten zuerst das Datum und dann die Uhrzeit steht. So sieht das dann aus: tt.mm.jjjj St.mm.se.
Wie meinst du das ??? Sprechen wir hier von Strings ???
Wenn ja, versuche es doch mit der Methode "split" !!!
Sie gibt einen String-Array zurück, welcher die Teil-Strings des Originals enthält,
"gespalten" an den Teilen, die dem übergebenen Parameter entsprechen, in deinem Fall 8
Java:
String s = "12.34.5678 12.34.56";
String[] sdt = s.split( " " );


String[] sd = sdt[ 0 ].split( "." );

int[] id = new int[ sd.length ];

for ( int i = 0; i < id.length; i++ )
id[ i ] = Integer.parseInt( sd[ i ] );


String[] st = sdt[ 1 ].split( "." );

int[] it = new int[ st.length ];

for ( int i = 0; i < it.length; i++ )
it[ i ] = Integer.parseInt( st[ i ] );


System.out.println( "Datum: " );
for ( int i = 0; i < id.length; i++ )
System.out.print( id[ i ] + " * " );

System.out.println();

for ( int i = 0; i < it.length; i++ )
System.out.print( it[ i ] + " * " );
Ausgabe 8
"Datum: 12 * 34 * 5678 "
"Uhrzeit: 12 * 34 * 56 "

Hilft dir das weiter ???
 

Dino264

Mitglied
Hallo Androbin,

danke erstmal für deine Hilfe. Da ich Urlaub etc. hatte habe ich deine Antwort jetzt erst gesehen. Ich habe es heute dann auch direkt ausprobiert leider ohne Erfolg. Er führt den Code zwar aus und in der Console steht dann auch Datum: doch nichts dahinter.

Des weiteren wüsste ich nicht wie ich den Codeschnipsel auf die Zeilen ebene pro Spalte in der JListe bekomme.

Ich glaube :) das es Vector Objekte.

Bitte hilf mir nochmal weiter.

Das Problem ist, ich kenn mich mit Java geht so aus konnte es mal besser habe es aber halt lange nicht so wirklich angewendet.

Es wäre sehr hilfreich wenn du mir die Lösung das nächste Mal direkt in meinen Code posten könntest.

Danke schon mal im Vorraus.

MfG

Dino264
 

Androbin

Bekanntes Mitglied
Ich helfe dir natürlich gerne weiter, das Problem ist nur, dass ich dein Problem nicht ganz durchschaue.
Und wenn du allgemein zum Theama Java mal Fragen haben solltest: Schreib' mir ne PN über mein Profil
 

Joose

Top Contributor
Am Besten wäre du schreibst dir eine eigene Klasse, welche von AbstractTableModel ableitet.
Für die Daten die du aus der Datenbank ausliest am Besten eine Modelklasse um die Daten zu kapseln (Vectoren sind außerdem veraltet).

Nähere Infos findest du hier: How to use tables

Um die Differenz von 2 Daten zu berechnen lege ein Datumsformat fest (Stichwort: SimpleDateFormat) und wandle dies 2 Strings in ein Date Objekt um, diese können einfach subtrahiert werden (oder addiert, oder ...). Mit den Datumsformat kannst du das Ergebnis wieder ins gewünschte Format für die GUI bringen.
 
Zuletzt bearbeitet:

Dino264

Mitglied
Hallo Joose,

leider komme ich erst jetzt dazu zu Antworten. Deine Antwort war sehr Hilfreich danke dir dafür. Leider ist dieses Projekt nun aber eingestellt worden. Da ich mich auf mein Abschlussprojekt vorbereiten soll, soll ich mich nochmal mehr mit Java auseinander setzen um wieder besser mit Java arbeiten zu können.

Aber wie gesagt Danke dir nochmals war sehr Hilfreich deine Antwort.

Mit freundlichen Grüßen

Dino264

Dino Zimmer
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S JavaFX WebView zeigt bestimmte Websites nicht an AWT, Swing, JavaFX & SWT 2
C Kleineres Bild an bestimmte Koordinaten setzen AWT, Swing, JavaFX & SWT 6
C JList: Bestimmte Objekte ausschließen AWT, Swing, JavaFX & SWT 1
Meeresgott AWT JFileChooser bestimmte Ordner anzeigen AWT, Swing, JavaFX & SWT 16
S Dreiecke in bestimmte Zellen einer JTable AWT, Swing, JavaFX & SWT 9
P Bestimmte Kreise färben AWT, Swing, JavaFX & SWT 3
J JavaFX Bestimmte Zellen im TableView ändern (Farbe und Text) AWT, Swing, JavaFX & SWT 1
T Nur bestimmte Bereiche eines Fotos bearbeiten AWT, Swing, JavaFX & SWT 0
stylegangsta JDialog bestimmte Zeilen kursiv AWT, Swing, JavaFX & SWT 20
F Event Handling JTextArea auf bestimmte Eingabe reagieren (Return-Taste) AWT, Swing, JavaFX & SWT 2
P DefaultStyledDocument eingegebenen String durchsuchen und bestimmte Sachen einfärben AWT, Swing, JavaFX & SWT 1
A Swing Bestimmte Werte anzeigen JSlider() AWT, Swing, JavaFX & SWT 2
L Swing ActionListener zugriff auf bestimmte Elemente AWT, Swing, JavaFX & SWT 3
K LayoutManager Buttons auf bestimmte x und y Koordinaten AWT, Swing, JavaFX & SWT 2
4 AWT bestimmte Objekte zeichnen und löschen AWT, Swing, JavaFX & SWT 8
GianaSisters Swing jTable (bestimmte Zellen umrahmen) AWT, Swing, JavaFX & SWT 8
M [erledigt] Bestimmte Zeile aus JTextArea löschen AWT, Swing, JavaFX & SWT 3
J Swing jSlider nur auf bestimmte werte beschränken AWT, Swing, JavaFX & SWT 15
Z AWT Auf bestimmte Checkbox einer Checkboxgroup zugreifen AWT, Swing, JavaFX & SWT 3
S JTable: Eingabe nur für bestimmte Var.Typen zulassen AWT, Swing, JavaFX & SWT 13
B JTable: Zeilen sortieren, aber bestimmte Zeilen fest lassen AWT, Swing, JavaFX & SWT 9
E Komponenten die wie bestimmte Symbole aussehen AWT, Swing, JavaFX & SWT 6
M Swing JList --> Selektion für bestimmte Indexe verbieten? AWT, Swing, JavaFX & SWT 8
T JComboBox: ActionListener/ItemListener wie nur auf bestimmte Events reagieren? AWT, Swing, JavaFX & SWT 7
borobudur Bestimmte Zone auf einem Bild definieren AWT, Swing, JavaFX & SWT 7
dl85hej bestimmte Zeile anspringen AWT, Swing, JavaFX & SWT 3
R Bestimmte Komponenten vom Neuzeichnen abhalten AWT, Swing, JavaFX & SWT 2
G Bild a auf Bild b, bestimmte Farbe (zb Weiß) durchsichtig AWT, Swing, JavaFX & SWT 7
G Aus Arraylist bestimmte Objekte wiedergegeben bekommen? AWT, Swing, JavaFX & SWT 7
F Wie bestimmte Obj. einer ContentPane abfragen und vergl? AWT, Swing, JavaFX & SWT 11
G Bei JTable eine bestimmte Zelle färben AWT, Swing, JavaFX & SWT 11
R nur bestimmte Daten in JTable anzeigen lassen? AWT, Swing, JavaFX & SWT 3
A Bestimmte Spalten nicht editierbar machen AWT, Swing, JavaFX & SWT 6
C JFormattedTextField - nur bestimmte Zeichen zulassen AWT, Swing, JavaFX & SWT 3
A JTable, bestimmte Zeilen blau hinterlegen AWT, Swing, JavaFX & SWT 3
K Punkte in eine bestimmte Richtung bewegen AWT, Swing, JavaFX & SWT 5
L Again: In JTable bestimmte Zellen färben AWT, Swing, JavaFX & SWT 12
S JCellRenderer läuft nur einmal in bestimmte Bedingung AWT, Swing, JavaFX & SWT 5
B JEditorPane: Höhe für bestimmte Breite bestimmen AWT, Swing, JavaFX & SWT 4
V Bestimmte Spalten im JTable nicht anzeigen AWT, Swing, JavaFX & SWT 2
S Bestimmte Zellenselektion in einer JTable AWT, Swing, JavaFX & SWT 12
C Wie skaliere ich ein Image in eine bestimmte größe? AWT, Swing, JavaFX & SWT 2
M Bestimmte GUI erstellen: Layoutproblem AWT, Swing, JavaFX & SWT 17
K Objekt in eine bestimmte Zelle eines JTables legen AWT, Swing, JavaFX & SWT 3
B ComboBox: nur bestimmte Zeichen zulassen AWT, Swing, JavaFX & SWT 5
B Eingabefelder nur für bestimmte Werte AWT, Swing, JavaFX & SWT 8
W JFileChooser; nur bestimmte Datein AWT, Swing, JavaFX & SWT 5
H JTabel - RowFilter Daten für Berechnung filtern AWT, Swing, JavaFX & SWT 6
S Event Handling Neu zeichnen nur wenn Berechnung fertig ist AWT, Swing, JavaFX & SWT 4
M Graphics2D: drawString Berechnung AWT, Swing, JavaFX & SWT 1
R Berechnung von Animationen AWT, Swing, JavaFX & SWT 7
B ProgressBar während Berechnung AWT, Swing, JavaFX & SWT 4
E Buttons während einer Berechnung deaktivieren AWT, Swing, JavaFX & SWT 6
S Berechnung abbrechen mit Button AWT, Swing, JavaFX & SWT 6
P Berechnung Kurvendiskussion AWT, Swing, JavaFX & SWT 6
S int-berechnung des RGB-Wertes ohne neue Instanz? AWT, Swing, JavaFX & SWT 9
G Status der Berechnung per JProgress anzeigen lassen AWT, Swing, JavaFX & SWT 6
Encera TableView Zeilen als Spalten im SceneBuilder AWT, Swing, JavaFX & SWT 0
W JavaFX JavaFX - Spalten auf ganze SpreadsheetView verteilen AWT, Swing, JavaFX & SWT 16
H automatische Anzahl der Spalten ermitteln -> geht nicht AWT, Swing, JavaFX & SWT 6
ralfb1105 JavaFX Dynamisch TableView Spalten erstellen AWT, Swing, JavaFX & SWT 4
L JavaFX Gridpane mit gleich großen Spalten AWT, Swing, JavaFX & SWT 23
K TreeTableView (cellFactory) - wie Daten in Spalten einfügen AWT, Swing, JavaFX & SWT 0
H TableView mit variabler Anzahl Spalten AWT, Swing, JavaFX & SWT 2
R Swing JTable : Header der Spalten ergänzen mit caption (wie bei html-table) AWT, Swing, JavaFX & SWT 2
S JComboBox mit mehreren Spalten? AWT, Swing, JavaFX & SWT 6
K JavaFX Spalten der Tabellen verschieben AWT, Swing, JavaFX & SWT 2
W JTable erstellen und Spalten sortieren AWT, Swing, JavaFX & SWT 2
I JTable Spalten automatisch dem Inhalt anpassen! AWT, Swing, JavaFX & SWT 6
O Swing Spalten-Position nach verschieben AWT, Swing, JavaFX & SWT 6
M JTable mit wechselnden Spalten - sehr Langsam AWT, Swing, JavaFX & SWT 5
O Swing JTable spalten sollen Links stehen AWT, Swing, JavaFX & SWT 5
T Spaltengröße einzelner Spalten in Gridlayout festlegen AWT, Swing, JavaFX & SWT 3
M Swing JTable - Umsortieren einzelner Spalten unterbinden AWT, Swing, JavaFX & SWT 6
D Problem mit 3-Spalten Layout AWT, Swing, JavaFX & SWT 17
J Swing JTable: Komplette Zeile aber ohne Spalten markieren AWT, Swing, JavaFX & SWT 11
B JFileChooser breite der Spalten? AWT, Swing, JavaFX & SWT 5
P Liste mit Icons und mehreren Spalten AWT, Swing, JavaFX & SWT 7
B JTable Zeilen und Spalten selektieren AWT, Swing, JavaFX & SWT 5
G LayoutManager Layout für Spalten AWT, Swing, JavaFX & SWT 8
I jList mit Spalten AWT, Swing, JavaFX & SWT 3
G Swing JTextArea mit fester Anzahl Spalten! AWT, Swing, JavaFX & SWT 10
C [Swing] JList JText 2 Spalten Modell prozentual verteilen AWT, Swing, JavaFX & SWT 2
D JTabel: Überschrift, Abstand zwischen Tabellen, Spalten-Farbe ändern AWT, Swing, JavaFX & SWT 2
B Swing GridLayout.add über 2 Spalten? AWT, Swing, JavaFX & SWT 7
M Sortierung und Vertauschen von Spalten in JTable AWT, Swing, JavaFX & SWT 6
F Spalten in JTable immer am rechten Tabellenrand AWT, Swing, JavaFX & SWT 3
B Swing JTable Spalten namen AWT, Swing, JavaFX & SWT 10
E Swing JTable Spalten ausblenden?! AWT, Swing, JavaFX & SWT 3
T jTable und farbige Spalten AWT, Swing, JavaFX & SWT 18
P GridBagLayout - zwei Spalten mit gleicher Größe AWT, Swing, JavaFX & SWT 11
B Swing JTable mit scrollbalken anhand von Spalten AWT, Swing, JavaFX & SWT 3
B Swing JTable Spalten merken AWT, Swing, JavaFX & SWT 6
E JTable nach mehreren Spalten sortieren AWT, Swing, JavaFX & SWT 14
B SWT SWT Tree mit mehreren Spalten AWT, Swing, JavaFX & SWT 3
F Swing J(X)Table Spalten umsortieren NUR im View (Wie finde ich eine Spalte nach Name?) AWT, Swing, JavaFX & SWT 3
H Swing TableCellRenderer für verschiedene Spalten AWT, Swing, JavaFX & SWT 11
J Swing JComboBox mit mehreren Spalten AWT, Swing, JavaFX & SWT 4
D Layout 2 unterschiedliche spalten AWT, Swing, JavaFX & SWT 7
S Swing JTable: Spalten mit relativer Breite im ungleichmäßigen Verhältnis AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben