JScrollPane --> Programm hängt sich beim scrollen auf

Skyzen

Mitglied
Hallo Leute,
ich bin noch java-anfänger und habe jetzt sehr viel im inet zu meinem problem gesucht aber nichts richtiges gefunden, das mir weiter hilft oder dass ich verstehe.
ich habe folgendes problem. auf einer gui oberfläche kann man einstellungen über den zeitraum vornehmen und dann gibt das programm einem in einer jTable welche auf einem jScrollPane liegt die gewünschten daten aus. das funktioniert auch ohne probleme und ich kann auch scrollen, solange es nicht viele daten sind. aber wenn es mehrere daten sind und man länger scrollen muss, muss ich nur einmal das rädchen an der maus komplett drehen oder den scrollbalken runter ziehen und es scrollt vllt einen halben cm bis cm und das programm hängt sich total auf, so dass ich es nur noch über den task-manager schließen kann.
beim recherchieren nach meinem problem bin ich auf folgendes gestoßen. kann es evtl daran liegen, dass die daten irgendwie nachgeladen werden müssen und man dass evtl in einem extra thread macht? oder liegt es an was ganz anderem? wie auch immer, den ansatz mit den threads und den daten nachladen habe ich nicht richtig verstanden wie man den umsetzt.
falls ihr mir weiter helfen könnt wäre zu der erklärung ein bisschen code ganz hilfreich ;)
vielen dank schon mal im voraus, ich weiß sonst echt nicht mehr weiter :(
 

Skyzen

Mitglied
Ich versuche mal einen Teil des Programms etwas besser zu erläutern.
In meiner Datenbank werden die An-/Abmeldezeiten von Mitarbeitern festgehalten.
Ich kann dann in meinem Programm Einstellungen über den Zeitraum vornehmen und mir gibt es dann die Daten in einer Tabelle aus. Dabei habe ich aber noch eine Spalte dazugefügt welche mir die Dauer anzeigt für den Zeitraum der Anmeldung bis zur Abmeldung und ich habe noch eine Spalte eingefügt welche mir die gesamte Dauer für das jeweilige Datum ausgibt. Das alles funktioniert soweit auch ohne Probleme und sieht dann wie im folgenden Bild aus. Aus diesem Grund gehe ich auch nicht weiter auf die Einstellungen, welche zur Datenbankausgabe vornehmen kann, drauf ein, da diese funktioniert.
Ich habe nun folgendes Problem, und zwar wenn die Tabelle nicht so lang ist, sprich es sind nicht so viele Datensätze dann funktioniert das Scrollen ohne Probleme. Aber sobald die Tabelle länger wird und und somit auch der Scroll-Bereich größer wird hängt das ganze Programm sich beim Scrollen auf und man kann es nur noch über den Task-Manager schließen.
Hat irgendjemand eine Idee an was das liegen kann oder was ich dagegen machen muss?
Ich bin nämlich echt am verzweifeln und das Programm wär endlich fertig wenn es sich nur nicht aufhängen würde. :(



Ich habe meine Klasse Database in welcher ich in dem Konstruktor den Treiber lade und die Verbindung zur Datenbank herstelle.
Java:
package database;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;

public class Database {

	private Connection con;

	public Database(){
		try {
			Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); // Treiber für ODBC
			con = DriverManager.getConnection("jdbc:odbc:mysql2odbc"); // Verbindung zu der Datenbank
		} catch (ClassNotFoundException | SQLException e) {
			e.printStackTrace();
		}
	}

In meiner Window-Klasse erstelle ich die Tabelle, danach erstell ich das ScrollPane und übergib diesem meine Tabelle. In der Methode anzeigen() wird meiner Tabelle dass das TableModell übergeben, nachdem ich die Einstellungen über den Zeitraum vorgenommen habe.

Java:
private void initialize() {
...
	tableZeit = new JTable();
	ausgabeZeit = new JScrollPane(tableZeit);
...
}

private void anzeigen(){		
	myTableModelZeit = new MyTableModelZeit();
	tableZeit.setModel(myTableModelZeit);
	tableZeit.setVisible(true);
}


Falls mein Fehler was mit meiner Table-Klasse zu tun hat ist hier mal noch der komplette Code dafür.
Als kleiner Hinweiß, die anderen beiden Konstruktoren verwende ich um die Zeiteinstellungen zu übergeben und meine Ausgabe in der Methode getValueAt() ist etwas komplexer, da ich Spalte 1 und 5 nicht redundant ausgeben will (siehe Bild oben).
Java:
package tables;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import javax.swing.table.AbstractTableModel;
import database.Database;
import database.Zeit;

public class MyTableModelZeit extends AbstractTableModel {

	private ArrayList<Zeit> arbeitszeitenEinzeln = new ArrayList<Zeit>();
	private static ArrayList<Zeit> arbeitszeitenGesamt = new ArrayList<Zeit>();
	
	private Database db;
	private Connection con;
	private Statement stmt;
	private ResultSet rs;
	private Zeit zeit;
	
	private static boolean istMonat = true;
	private static String benutzername = "";
	private static String monat = "";
	private static String zeitraumStart = "";
	private static String zeitraumEnde = "";
	
	
	// Konstruktoren
	public MyTableModelZeit() {
		this.db = new Database();
		this.con = db.getCon();
		updateFromDatabase();
	}
		
	public MyTableModelZeit(String monat) {
		MyTableModelZeit.monat = monat;
		MyTableModelZeit.istMonat = true;
	}
	
	public MyTableModelZeit(String zeitraumStart, String zeitraumEnde) {
		MyTableModelZeit.zeitraumStart = zeitraumStart;
		MyTableModelZeit.zeitraumEnde = zeitraumEnde;
		MyTableModelZeit.istMonat = false;
	}
	
	
	@Override
	public int getColumnCount() {
		return 5;
	}

	@Override
	public int getRowCount() {
		return arbeitszeitenEinzeln.size();
	}
	
	@Override
	public Object getValueAt(int row, int col) {
		switch (col){
			case 0:
				if((row != 0) && (arbeitszeitenEinzeln.get(row).getDatum()).equals(getValueAt((row-1), col))){
					return null;
				} else if((row != 0) && getValueAt((row-1), col) == null){
					int index = 2;
					while(true){
						if(getValueAt((row-index), col) != null){
							if((arbeitszeitenEinzeln.get(row).getDatum()).equals(getValueAt((row-index), col))){
								return null;
							} else{
								return arbeitszeitenEinzeln.get(row).getDatum();
							}
						}
						index += 1;
					}					
				} else{
					return arbeitszeitenEinzeln.get(row).getDatum();
				}
			case 1:
				return arbeitszeitenEinzeln.get(row).getVon();
			case 2:
				return arbeitszeitenEinzeln.get(row).getBis();
			case 3:
				return String.valueOf(arbeitszeitenEinzeln.get(row).getArbeitszeitEinzeln());
			case 4:
				if(getValueAt(row, 0) == null){
					return null;
				} else{	
					for(Zeit d : arbeitszeitenGesamt){
						if(d.getDatum().equals(getValueAt(row, 0))){
							return String.valueOf(d.getArbeitszeitGesamt());
						}
					}	
				}
		}
		return null;
	}

	@Override
	public String getColumnName(int col) {
		switch (col){
			case 0:
				return "Datum";
			case 1:
				return "von";
			case 2:
				return "bis";
			case 3:
				return "Arbeitszeit";
			case 4:
				return "Arbeitszeit Gesamt (Tag)";
			}
		return null;
	}
	
	public void updateFromDatabase() {
		arbeitszeitenEinzeln.clear();
		arbeitszeitenGesamt.clear();

		try {			
			stmt = con.createStatement();
			
			// Befüllen des Arrays arbeitszeitenEinzeln
			if(istMonat == true){
				String abfrage1 = "SELECT Datum, von, bis, ROUND(TIME_TO_SEC(TIMEDIFF(bis, von))/3600, 2) FROM Zeit " 
						+ "WHERE Benutzername = '" + benutzername + "' AND Datum LIKE '" + monat + "' ORDER BY Datum;";
				rs = stmt.executeQuery(abfrage1);
			} else if(istMonat == false){
				String abfrage1 = "SELECT Datum, von, bis, ROUND(TIME_TO_SEC(TIMEDIFF(bis, von))/3600, 2) FROM Zeit " 
						+ "WHERE Benutzername = '" + benutzername + "' AND Datum BETWEEN '" + zeitraumStart + "' AND '" + zeitraumEnde + "' ORDER BY Datum;";
				rs = stmt.executeQuery(abfrage1);
			}
			
			while(rs.next()){
				if(rs.getString(3) != null){
					zeit = new Zeit(rs.getString(1), rs.getString(2), rs.getString(3), rs.getDouble(4));
					arbeitszeitenEinzeln.add(zeit);
				} else{
					zeit = new Zeit(rs.getString(1), rs.getString(2), "Zeit fehlt!", rs.getDouble(4));
					arbeitszeitenEinzeln.add(zeit);
				}

			}
					
			// Befüllen des Arrays arbeitszeitenGesamt
			if(istMonat == true){
				String abfrage2 = "SELECT Datum, ROUND(SUM(TIME_TO_SEC(TIMEDIFF(bis, von))/3600), 2) FROM Zeit "
						+ "WHERE bis IS NOT NULL AND Benutzername = '"+ benutzername +"' AND Datum LIKE '" + monat + "' GROUP BY Datum ORDER BY Datum;";
				rs = stmt.executeQuery(abfrage2);
			} else if(istMonat == false){
				String abfrage2 = "SELECT Datum, ROUND(SUM(TIME_TO_SEC(TIMEDIFF(bis, von))/3600), 2) FROM Zeit "
						+ "WHERE bis IS NOT NULL AND Benutzername = '"+ benutzername +"' AND Datum BETWEEN '" + zeitraumStart + "' AND '" + zeitraumEnde + "' GROUP BY Datum ORDER BY Datum;";
				rs = stmt.executeQuery(abfrage2);
			}		
			
			while(rs.next()){
				zeit = new Zeit(rs.getString(1), rs.getDouble(2));
				arbeitszeitenGesamt.add(zeit);
			}
			
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

	public static void setBenutzername(String benutzername) {
		MyTableModelZeit.benutzername = benutzername;
	}

	public static ArrayList<Zeit> getArbeitszeitenGesamt() {
		return arbeitszeitenGesamt;
	}
	
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
volcanos Scrollen: JScrollPane mit Graphics g und Java-Fonts extends Frame ? AWT, Swing, JavaFX & SWT 5
E JScrollPane mit JPanel verbinden AWT, Swing, JavaFX & SWT 1
B Swing JScrollPane scrollt nicht AWT, Swing, JavaFX & SWT 10
P JTextarea (in JScrollPane) zeigt nur die beiden letzten Einträge an? AWT, Swing, JavaFX & SWT 0
O Swing "Eigenes" JPanel wird dem JScrollPane nicht hinzugefügt AWT, Swing, JavaFX & SWT 5
E Komponenten von JScrollPane werden nicht richtig ermittelt AWT, Swing, JavaFX & SWT 2
E wie in JScrollPane auf JTextArea zugreifen AWT, Swing, JavaFX & SWT 12
N Swing JScrollPane mit Tastatur bedienen? AWT, Swing, JavaFX & SWT 0
F JScrollPane anzeige AWT, Swing, JavaFX & SWT 7
K Swing JScrollPane wird nicht angezeigt wenn man Components darstellt. AWT, Swing, JavaFX & SWT 2
M Swing JPanel in JScrollPane AWT, Swing, JavaFX & SWT 3
M Problem mit Add JScrollPane AWT, Swing, JavaFX & SWT 25
P Swing JEditorPane in Kombination mit JScrollPane AWT, Swing, JavaFX & SWT 29
S Swing jScrollPane - pro Eintrag der Liste, die jCheckBoxes Speichern die in dem Eintrag aktiviert wurden AWT, Swing, JavaFX & SWT 2
T Swing Probleme mit repaint() bzw. JScrollPane AWT, Swing, JavaFX & SWT 7
D JScrollPane in JTabbedPane AWT, Swing, JavaFX & SWT 3
MaxG. Swing JScrollPane AWT, Swing, JavaFX & SWT 10
Soloeco Swing JScrollPane AWT, Swing, JavaFX & SWT 6
A Swing Probleme mit dem adden von JButtons zur JScrollPane AWT, Swing, JavaFX & SWT 2
A JScrollPane soll JPanel mit JButtons enthalten und eine Scollbar anzeigen AWT, Swing, JavaFX & SWT 1
J JScrollPane funktioniert nicht AWT, Swing, JavaFX & SWT 5
B LayoutManager GridBagLayout und JScrollPane AWT, Swing, JavaFX & SWT 5
Thallius JScrollPane Scrollpos setzen nach Neuzeichnen AWT, Swing, JavaFX & SWT 3
P MalProgramm mit JScrollPane und Canvas AWT, Swing, JavaFX & SWT 2
D Swing JScrollPane Tabelle ändern (2 Tabellen) AWT, Swing, JavaFX & SWT 7
U JScrollPane -> JTabbedPane u.A. AWT, Swing, JavaFX & SWT 3
A Layout-Manager, JScrollPane, ... Chaos AWT, Swing, JavaFX & SWT 5
V JScrollPane im zur Laufzeit verändernden JFrame AWT, Swing, JavaFX & SWT 0
W Swing Größenänderung vom JPanel im JScrollPane und anschließendes positionieren AWT, Swing, JavaFX & SWT 2
X Swing JButton's zum JScrollPane hinzufügen geht nicht. Bitte um Hilfe. AWT, Swing, JavaFX & SWT 9
G JTextArea mit JScrollPane wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
K Swing JScrollPane - JScrollBar anzeigen, wenn Frame verkleinert wird AWT, Swing, JavaFX & SWT 3
N Swing Problem beim Scrollen mit JScrollPane AWT, Swing, JavaFX & SWT 6
Bluedaishi JScrollpane AWT, Swing, JavaFX & SWT 0
L JScrollPane scrollt nicht !! AWT, Swing, JavaFX & SWT 3
F JScrollPane Position setzen (x=0, y=0) AWT, Swing, JavaFX & SWT 2
R JScrollPane überdeckt JPanel? AWT, Swing, JavaFX & SWT 7
H JTree in JScrollPane passt sich nicht an Größe von JPanel an AWT, Swing, JavaFX & SWT 2
S JScrollPane und BorderLayout AWT, Swing, JavaFX & SWT 1
M Mehrere Jpanel in einem JScrollPane (Layout) AWT, Swing, JavaFX & SWT 2
W Swing JScrollPane für mein Fenster AWT, Swing, JavaFX & SWT 4
A Swing Probleme mit JScrollPane AWT, Swing, JavaFX & SWT 6
F JTable mit JScrollPane AWT, Swing, JavaFX & SWT 4
I JPanel in JScrollPane verkleinert sich leider nicht .... AWT, Swing, JavaFX & SWT 2
G JScrollPane bricht am Ende der Anzeige nicht um AWT, Swing, JavaFX & SWT 2
J Swing JTextPane mit JScrollPane auf JPanel scrollen nicht AWT, Swing, JavaFX & SWT 6
W Sichtbarer Bereich JScrollPane vs. JList AWT, Swing, JavaFX & SWT 3
B Swing JPanel in JScrollPane einfügen AWT, Swing, JavaFX & SWT 2
S 2D-Grafik Transparentes JScrollPane AWT, Swing, JavaFX & SWT 0
S 3D-Grafik 3d Grafik auf einem JPanel oder im JScrollPane AWT, Swing, JavaFX & SWT 1
R Ändern Default-Verhalten von JScrollpane in einer JScrollpane AWT, Swing, JavaFX & SWT 1
A JScrollPane - ScrollBar Buttongröße verändern AWT, Swing, JavaFX & SWT 1
J Bilder auf JPanel (im JScrollPane) nacheinander laden AWT, Swing, JavaFX & SWT 0
A Swing JScrollPane Problem AWT, Swing, JavaFX & SWT 6
H Swing JScrollPane mit "viel Inhalt" scrollt zu langsam (inkl. See-For-Yourself.jar :D) AWT, Swing, JavaFX & SWT 2
T Swing JScrollPane in JPanel - Breite dynamisch, Höhe fix - wie? AWT, Swing, JavaFX & SWT 2
D Swing JScrollPane in JScrollPane - Problem AWT, Swing, JavaFX & SWT 3
K Bug in JScrollPane? AWT, Swing, JavaFX & SWT 4
T Swing JScrollPane Farbe der Scrollbar AWT, Swing, JavaFX & SWT 3
M JScrollPane Header AWT, Swing, JavaFX & SWT 3
G JScrollPane über JScrollPane AWT, Swing, JavaFX & SWT 2
V LayoutManager JScrollPane verwirft Elementanordnung AWT, Swing, JavaFX & SWT 3
B JScrollPane Problem AWT, Swing, JavaFX & SWT 2
D Swing JScrollPane AWT, Swing, JavaFX & SWT 7
H cardlayout und jscrollpane AWT, Swing, JavaFX & SWT 14
F 2D-Grafik Skalieren der Scrollbars beim Zoomen einer JScrollPane AWT, Swing, JavaFX & SWT 4
B JScrollPane Horizontal klappt nicht. AWT, Swing, JavaFX & SWT 4
G JScrollPane reagiert nicht auf Änderung der JPanel-Größe AWT, Swing, JavaFX & SWT 4
C jPanel auf jScrollPane zentrieren AWT, Swing, JavaFX & SWT 3
M Swing JScrollPane (Parent JTextArea) aktualisieren + neue Zeile AWT, Swing, JavaFX & SWT 5
U Swing JPane und JScrollpane in JSplitpane-Seite: Scrollen funktioniert nicht AWT, Swing, JavaFX & SWT 3
A Swing Korrekte JTable.rowAt(point) für JTable in JScrollPane AWT, Swing, JavaFX & SWT 5
D Label über JScrollPane AWT, Swing, JavaFX & SWT 3
S JScrollPane reagiert nicht AWT, Swing, JavaFX & SWT 3
X JScrollPane zu JTable hinzufügen AWT, Swing, JavaFX & SWT 16
H JScrollPane - JEditorPane und HTML-Tabelle AWT, Swing, JavaFX & SWT 2
D LayoutManager JScrollPane mit dynamischem Inhalt AWT, Swing, JavaFX & SWT 8
P Swing JScrollpane AWT, Swing, JavaFX & SWT 2
B JScrollPane scrollt nicht immer automatisch AWT, Swing, JavaFX & SWT 2
V Swing JScrollPane Viewport verschieben AWT, Swing, JavaFX & SWT 2
J JScrollPane Probleme AWT, Swing, JavaFX & SWT 3
S Swing JScrollPane verliert Scrollbars AWT, Swing, JavaFX & SWT 5
D Swing JTable in JScrollpane beliebig verbreitern AWT, Swing, JavaFX & SWT 5
A Swing Anzeige Text in JScrollpane AWT, Swing, JavaFX & SWT 8
J Swing Unteren Abstand für JTable in JScrollPane festlegen AWT, Swing, JavaFX & SWT 10
xehpuk Swing Line-wrapping von JTextPane (in JScrollPane) AWT, Swing, JavaFX & SWT 3
M JScrollPane Problem AWT, Swing, JavaFX & SWT 6
S Swing JScrollpane und ViewPort AWT, Swing, JavaFX & SWT 4
D JScrollPane funktioniert nicht AWT, Swing, JavaFX & SWT 12
X JScrollPane funzt net... AWT, Swing, JavaFX & SWT 5
H jscrollpane AWT, Swing, JavaFX & SWT 12
RELAXccc Swing JTree + JScrollPane, refresh Problem AWT, Swing, JavaFX & SWT 17
A Problem mit JScrollPane in einer JScrollpane AWT, Swing, JavaFX & SWT 4
B JScrollPane Problem AWT, Swing, JavaFX & SWT 25
T Swing JScrollPane- und Tabelle-Header Problem AWT, Swing, JavaFX & SWT 25
P Swing JScrollPane-Inhalt: Grösse anpassen AWT, Swing, JavaFX & SWT 6
G Swing Höhe des View eines JScrollPane fest auf Höhe des JScrollPane setzen! AWT, Swing, JavaFX & SWT 4
A JScrollPane AWT, Swing, JavaFX & SWT 16
C Swing JScrollPane und Scroll-Geschwindigkeit AWT, Swing, JavaFX & SWT 8
S JScrollpane mit JPanel und Probleme AWT, Swing, JavaFX & SWT 4

Ähnliche Java Themen

Neue Themen


Oben