Tabs bei JTabbedPane werden jedes neu ausgeführt

Status
Nicht offen für weitere Antworten.

kaneb

Mitglied
Hallo

Ich hab ein folgendes Problem. Ich hab ein Frame mit 4 verschiedene Tabs erstellt

Code:
public class RunProg extends JFrame {
	

	public RunProg(String titel){
		setVisible(true);
		setTitle(titel);
		setPreferredSize(new Dimension(1000,700));
		JTabbedPane jTabbedPane = new javax.swing.JTabbedPane();

        setDefaultCloseOperation(EXIT_ON_CLOSE);
        
        
        jTabbedPane.add("Random Sorted Array", new QuickSortPlots(CreateArray.createRandomSortedArray(500)));
        jTabbedPane.add("Nearly Sorted Array", new  QuickSortPlots(CreateArray.createNearlySortedArray(500)));
        jTabbedPane.add("Reversed Sorted Array", new  QuickSortPlots(CreateArray.createReversedSortedArray(500)));
        jTabbedPane.add("Sorted Array", new  QuickSortPlots(CreateArray.createSortedArray(500)));
        


        getContentPane().add(jTabbedPane, BorderLayout.CENTER);

        pack();
	}
	
	public static void main(String[] arg){
		new RunProg("QuickSort");
	}	

}

wobei in jedem Tab Plots sind. die QuickSortPlots sieht so aus.


Code:
public class QuickSortPlots extends Container {
	
	int[] arr;
	long comp1,comp2,exch1,exch2,start,stop;
	
	public QuickSortPlots(int[] arr){
		this.arr=arr;
		setFocusable(false);
		comp1=0; comp2=0;
		exch1=0; exch2=0;
		start=0; stop=0;
	}
	public void paint(Graphics g){
		
		
		g.drawString("Werte", 10, 235);
		g.drawString("d. Arrays",1, 250);
		g.drawString(arr.length+"", 20, 40);
		g.drawString("A[i]", 60, 40);
		
		g.drawString("0",30,555);
		
		g.drawString("Laenge des Arrays", 230, 570);
		g.drawString(arr.length+"", 550, 570);
		g.drawString("i", 550, 540);
		
		//Point(50,400) is (0,0)
		g.drawLine(50, 50, 50, 550);
		g.drawLine(50, 550, 550, 550);
		int x=50; int y=550;
		
		double pointHelper = 500/arr.length;
		
		//paint unsorted array
		g.setColor(Color.RED);
		for(int i=0;i<arr.length;i++){
			int x1 = (int)(x+i*pointHelper);
			int y1 = (int)-((pointHelper*arr[i])-y);
			g.drawOval(x1, y1, 1, 1);
		}
		comp1=QuickSort.comparisons;
		exch1=QuickSort.exchanges;
		start = System.currentTimeMillis();
//		QuickSort quicksort= new QuickSort();
		QuickSort.quicksort(arr);
		stop = System.currentTimeMillis();
		comp2=QuickSort.comparisons;
		exch2=QuickSort.exchanges;
		
		double elapsed = stop-start;
		g.setColor(Color.BLUE);
		for(int i=0;i<arr.length;i++){
			int x1 = (int)(x+i*pointHelper);
			int y1 = (int)-((pointHelper*arr[i])-y);
			g.drawOval(x1, y1, 1, 1);
		}
		Font font = new Font(null,0,20);
		g.setFont(font);
		g.setColor(Color.DARK_GRAY);
		g.drawString("STATISTICS", 720, 50);
		g.setColor(Color.black);
		g.setFont(new Font(null,0,20));
		g.drawString("Time: "+elapsed+" nanosec.", 720, 80);
		g.drawString("Comparisons: "+(comp2-comp1), 720, 100);
		g.drawString("Exchanges: "+(exch2-exch1), 720, 120);		
		
		
		
	}

}

Also sowie ihr merken könnt, hier werden verschiedene Punkte erstellt, aber wenn ich von einem zu dem anderen Tab wechsele, und dann wieder zu dem vorherigen Tab wechsele, dann werde ich nicht vollständig das von paint() in bildschirm bekommen, und es wird noch mal der Objekt erstellt und aufgerufen(so meine ich mindestens, da ganz andere Punkte bekomme). Ich will nicht die Objekte nach jedem Wechsel von Tabs aufgerufen werden, und jedes Mal neue Punkte erstellen. Also, keine Änderungen mehr solange das Fenster nicht geschlossen ist. Ist es überhaupt möglich, oder vergesse ich noch 'was zu machen.

Danke im voraus
kaneb

edit: Das URL von JARDatei http://maloku.info/RunProg.jar
 

Marco13

Top Contributor
Man sollte nicht von Container erben, sondern von JComponent, und dort dann nicht die paint, sondern die paintComponent überschreiben
Code:
class QuickSortPlots extends JComponent
{
    public void paintComponent(Graphics g)
    {
        super.paintComponent(g);
        .... der ganze Rest....
    }
}
Allerdings ist es MEHR als häßlich, in der paint-Methode eine sortierfunktion aufzurufen und irgendwelche Zeitmessungen zu machen. Die paint(Component)-Methode ist NUR zum painten da, und wirklich NUR zum painten. Sonst hieße sie ja (running gag) nicht paintComponent, sondern paintComponentAndDoAllTheStuffOfWhichIDoNotKnowWhereToPutItBecuaseIAmTooLazyToReadATutorial.
 

kaneb

Mitglied
Obwohl ja von Container in JComponent geändert habe, ist immer noch das gleiche. Trotzdem vielen Dank für deine Antwort

Allerdings ist es MEHR als häßlich, in der paint-Methode eine sortierfunktion aufzurufen und irgendwelche Zeitmessungen zu machen. Die paint(Component)-Methode ist NUR zum painten da, und wirklich NUR zum painten. Sonst hieße sie ja (running gag) nicht paintComponent, sondern paintComponentAndDoAllTheStuffOfWhichIDoNotKnowWhereToPutItBecuaseIAmTooLazyToReadATutorial.

Na dann, gib mir denn Tips, wie ich das anders machen könnte, du musst aber damit ausrechnen, dass ich noch ein Anfänger bin.

mfg
 

Marco13

Top Contributor
Hast du auch paint in paintComponent geändert, und super.paintComponent aufgerufen? Naja, selbst wenn, dann muss es nicht funktionieren: In deinem Beispiel wird ja bei jedem Neuzeichnen neu sortiert. Wenn nun zweimal neu gezeichnet wird (weil man z.B. das Fenster vergrößert oder verkleinert) dann kommt beim zweiten Neuzeichnen vermutlich(!) nur Mist raus.

Kannst vielleicht mal hier http://www.java-forum.org/de/viewtopic.php?t=67506&start=30 den letzten Beitrag angucken ... ist zwar auch nur schnell hingeschrieben, praktisch kommentarfrei, und in einigen Punkten... "ausbaufähig", aber verdeutlicht vielleicht EINE von vielen möglichen Herangehensweisen...

Wichtig ist in jedem Fall, dass das Sortieren usw. (also die eigentliche Funktionalität) unabhängig vom GUI ist. D.h. der Sortieralgoritmus (und die Berechnung der Statistik, die du da machst) sollte funktionieren - auch, wenn gar kein Frame offen ist. Das GUI dient NUR zum Anzeigen (und ggf. zum Empfangen von Benutzereingaben, die dann aber möglichst so an den "Programmkern" weitergereicht werden sollten, dass man nicht erkennt, dass sie von einem GUI stammen). D.h. das GUI holt sich einfach nur die Daten ab, und zeigt sie an. Und dieses Abholen kann dann in der paintComponent gemacht werden.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
B JTabbedPane Tabs anordnen AWT, Swing, JavaFX & SWT 2
F JTabbedPane mit Button zum Hinzufügen eines neuen Tabs AWT, Swing, JavaFX & SWT 6
J JTabbedPane Grafik unterhalb der Tabs AWT, Swing, JavaFX & SWT 3
H Swing JTabbedPane: Zusätzliche Buttons neben den Tabs AWT, Swing, JavaFX & SWT 7
T JTabbedPane - neuen Tab zwischen zwei anderen Tabs hinzufügen AWT, Swing, JavaFX & SWT 2
G Swing JTabbedPane Was für ein Border wird da um die Tabs gezeichnet? AWT, Swing, JavaFX & SWT 6
D Tabs von JTabbedPane stylen AWT, Swing, JavaFX & SWT 6
D Swing mehrere JTable in separaten Tabs einer JTabbedPane AWT, Swing, JavaFX & SWT 2
N JTabbedPane mit schließbaren Tabs (X) AWT, Swing, JavaFX & SWT 2
C JTabbedPane - Tabs einfügen AWT, Swing, JavaFX & SWT 4
G JTabbedPane: Tabs verschwinden lassen ? AWT, Swing, JavaFX & SWT 10
C Aktion beim Anzeigen eines Tabs der JTabbedPane AWT, Swing, JavaFX & SWT 3
K JTabbedPane - Tabs umbenennen AWT, Swing, JavaFX & SWT 2
J jTabbedPane ohne Tabs möglich? AWT, Swing, JavaFX & SWT 5
G JTabbedPane: Tabs verschwinden lassen und wieder anzeigen AWT, Swing, JavaFX & SWT 3
O JTabbedPane - Zugriff auf die Elemente eines Tabs AWT, Swing, JavaFX & SWT 4
T Swing Schließbare Tabs AWT, Swing, JavaFX & SWT 10
B Datenübergabe zwischen Tabs und Daten speichern AWT, Swing, JavaFX & SWT 2
C SWT CTabFolder / CTabItem Markierung des angewählten Tabs entfernen AWT, Swing, JavaFX & SWT 10
I Textbreite von Font inklusive Tabs ermitteln AWT, Swing, JavaFX & SWT 4
B Eigene Methoden in TABs einfügen AWT, Swing, JavaFX & SWT 8
Airwolf89 Swing Tabs dynamisch ausblenden AWT, Swing, JavaFX & SWT 3
DStrohma Tabs unten anzeigen AWT, Swing, JavaFX & SWT 2
B MDI Anwendung alle maximierten InternalFrames in Tabs AWT, Swing, JavaFX & SWT 3
D Events bei Tabs in einem Editor AWT, Swing, JavaFX & SWT 2
P Problem bei Datei zur Verwaltung von Tabs AWT, Swing, JavaFX & SWT 5
J JOptionPane Tabs AWT, Swing, JavaFX & SWT 3
F An eindeutigen Index eines Tabs in einer JTabbed Pane kommen AWT, Swing, JavaFX & SWT 3
A Tabbed Pane ohne Tabs? - möglich? AWT, Swing, JavaFX & SWT 4
V JMenu und die Tabs von JTabbedFrame sind auf einmal schwarz AWT, Swing, JavaFX & SWT 3
R Name eines Tabs aktualisieren AWT, Swing, JavaFX & SWT 2
T Swing: MainForm mit mehreren Tabs AWT, Swing, JavaFX & SWT 6
O auf den inhalt eines selektierten Tabs zugreifen AWT, Swing, JavaFX & SWT 5
I SPACES anstelle von TABs in JTextArea AWT, Swing, JavaFX & SWT 2
Luma Tabs in JList? AWT, Swing, JavaFX & SWT 2
J Tabs?? AWT, Swing, JavaFX & SWT 1
BabySuna darstellungsprobleme mit JTabbedPane und GridBagLayout AWT, Swing, JavaFX & SWT 8
I JTabbedPane mit DnD, [x]-Schaltfläche, [+]-Schaltfläche usw. AWT, Swing, JavaFX & SWT 1
D JScrollPane in JTabbedPane AWT, Swing, JavaFX & SWT 3
D Kein Icon beim JTabbedPane AWT, Swing, JavaFX & SWT 1
D JTabbedPane GUI Experimente AWT, Swing, JavaFX & SWT 4
N JLabel in JTabbedPane verschieben AWT, Swing, JavaFX & SWT 2
U JScrollPane -> JTabbedPane u.A. AWT, Swing, JavaFX & SWT 3
L JTabbedPane mit for Schleife aufbauen AWT, Swing, JavaFX & SWT 4
J JTabbedPane Vollbild wenn Tabwechsel AWT, Swing, JavaFX & SWT 1
B StateChangeListener auf JTabbedPane AWT, Swing, JavaFX & SWT 5
F jTabbedPane Tabwechsel deaktivieren AWT, Swing, JavaFX & SWT 2
J JTabbedPane: close Button Problem AWT, Swing, JavaFX & SWT 2
J JTabbedPane: table in new tab: tooltip benutzt die column-widths von table in erstem geöffneten tab AWT, Swing, JavaFX & SWT 17
M JTabbedPane verändern mit Nimbus Look and Feel AWT, Swing, JavaFX & SWT 1
F JTabbedPane bestimmten Tab ansprechen AWT, Swing, JavaFX & SWT 13
BRoll JTabbedPane setTitleAt OutOfBoundsExc AWT, Swing, JavaFX & SWT 4
K JTabbedPane Tab Markierung / Selektion AWT, Swing, JavaFX & SWT 4
B Custom JTabbedPane-Tab-Design AWT, Swing, JavaFX & SWT 2
L JTabbedPane Closebutton integrieren AWT, Swing, JavaFX & SWT 6
V JTabbedPane Eingefügte Labels verschoben AWT, Swing, JavaFX & SWT 2
M Swing JTabbedPane: Tab-Elemente anpassen AWT, Swing, JavaFX & SWT 3
S Swing JTabbedPane: Nur nach ButtonClick und nicht nach Click auf Tab ins nächste Tab wechseln AWT, Swing, JavaFX & SWT 2
P JTabbedPane per Menuitem erstellen AWT, Swing, JavaFX & SWT 20
K Swing JTabbedPane wird nicht angezeigt AWT, Swing, JavaFX & SWT 19
B Swing JTabbedPane in JApplet -> Reiter bei Aktualisation mehrmals zu sehen AWT, Swing, JavaFX & SWT 3
M JTabbedPane -> setSelectedIndex funzt nicht AWT, Swing, JavaFX & SWT 3
D Bestimmtes JPanel innerhalb eines JTabbedPane ansprechen AWT, Swing, JavaFX & SWT 2
M jtabbedpane aktivieren/deaktivieren AWT, Swing, JavaFX & SWT 13
J Swing Letzten Tab einer JTabbedPane ermitteln AWT, Swing, JavaFX & SWT 6
B Hilfe zu JTable und JTabbedPane AWT, Swing, JavaFX & SWT 18
hdi LookAndFeel Nimbus BUG mit JTabbedPane?! AWT, Swing, JavaFX & SWT 5
hdi Swing Problem mit JTabbedPane AWT, Swing, JavaFX & SWT 2
A LookAndFeel Rollover Effekt bei JTabbedPane deaktivieren (Nimbus) AWT, Swing, JavaFX & SWT 8
T Inhalt von einem Tab an JTabbedPane größe ausrichten? AWT, Swing, JavaFX & SWT 2
S JTabbedPane Problem AWT, Swing, JavaFX & SWT 3
S JTabbedPane AWT, Swing, JavaFX & SWT 4
D JTabbedPane mit Eventlistener versehen? AWT, Swing, JavaFX & SWT 9
M Swing JTabbedPane Panels deaktivieren AWT, Swing, JavaFX & SWT 2
K JTabbedPane setName() für jedes Tab AWT, Swing, JavaFX & SWT 2
G JTabbedPane - Länge der Reiter beeinflussen? AWT, Swing, JavaFX & SWT 9
S Swing Komponentengröße in JTabbedPane AWT, Swing, JavaFX & SWT 7
M Ein Tab eine JTabbedPane durch Button Druck öffen AWT, Swing, JavaFX & SWT 2
Y LookAndFeel JTabbedPane: Tab-Farbe mit Nimbus setzen AWT, Swing, JavaFX & SWT 3
M CloseButton bei JTabbedPane AWT, Swing, JavaFX & SWT 4
P Swing JTabbedPane mit JButton einen anderen Tab anzeigen AWT, Swing, JavaFX & SWT 9
D JTabbedPane zentrieren AWT, Swing, JavaFX & SWT 2
S Swing JTabbedPane: Inhalt soll oben links anfangen AWT, Swing, JavaFX & SWT 6
Mike90 JTabbedPane Größe anpassen AWT, Swing, JavaFX & SWT 17
F JTabbedPane Reiter breite AWT, Swing, JavaFX & SWT 4
B JTabbedPane mit Enumeration dynamisch füllen AWT, Swing, JavaFX & SWT 5
D Swing Tab in JTabbedPane AWT, Swing, JavaFX & SWT 5
A JFrame > JTabbedPane > JPanel > addKeyListener AWT, Swing, JavaFX & SWT 18
D JTabbedPane - Farbe ändern im Bereich hinter den Reitern AWT, Swing, JavaFX & SWT 2
M JTabbedPane - Tab auslesen AWT, Swing, JavaFX & SWT 2
H Swing Problem mit JTabbedPane AWT, Swing, JavaFX & SWT 9
D jtabbedpane Event VOR tab-Wechsel AWT, Swing, JavaFX & SWT 3
S Border von JTabbedpane-Tab? AWT, Swing, JavaFX & SWT 3
M JTabbedPane Docable? AWT, Swing, JavaFX & SWT 3
L Swing JTabbedPane - Index vom Tab AWT, Swing, JavaFX & SWT 3
D Swing JTabbedPane, TabComponent & Popup AWT, Swing, JavaFX & SWT 4
F Borders von JTabbedPane und JScrollPane AWT, Swing, JavaFX & SWT 5
W JTabbedPane Größe anpassen AWT, Swing, JavaFX & SWT 4
G Swing JTabbedPane vergrößern AWT, Swing, JavaFX & SWT 2
H Swing Register (jTabbedPane) dynamisch hinzufügen? AWT, Swing, JavaFX & SWT 7

Ähnliche Java Themen

Neue Themen


Oben