Swing JScrollPane nimmt das JPanel zum Zeichnen nicht an

Status
Nicht offen für weitere Antworten.

Jay1980

Bekanntes Mitglied
Servus,

ich kann mir gerade nicht erklären warum es die JScrollPane nicht aktualisiert.

Ich habe eine JTabbedPane die JScrollPanes trägt, die als Reiter funktionieren.
Nun sind in den ScrollPanes meist JPanels, ein Reiter etwa soll nach einer ausgelösten Action ein JPanel bekommen, das als Zeichenfläche fungieren soll. Naja das Action Handling funktioniert, die Zeichenklasse leitet sich von JPanel ab und zeichnet auch nur eine Testlinie, da sollte auch nichts anbrennen. Ich denke es liegt an einem Layoutmanager oder einem Fehler beim 'Einsetzen' des neuen JPanels. Ich habe aus der JScrollPane des Tabs alle Komponenten removed und dann das neue JPanel geaddet. Als Ergebnis wird das alte JPanel entfernt aber das neue nicht angezeigt.
Danke vorab.

Hier der Code:
Code:
... Klasse JobaDrawPanel extends JPanel ...
/**
	  * paintComponent()
	  * 
	  * 
	  */
	 protected void paintComponent( Graphics g )
	 { 
		super.paintComponent(g); // Elternklassen ihre Sachen zeichnen lassen
		
		// Testlinie
		g.drawLine( 20, 40, 400, 40 );
		
...

.... Klasse JobaGui ....

public void actionPerformed(ActionEvent evt)
	{
		if ( evt.getActionCommand() == "Testbutton" )
		{
			JOptionPane.showMessageDialog(null, "ActionListener aus Testbutton ist da...");	
			// stoße Berechnung an
			
			// Objekt der Huellenberechnung starten
			JobaConvexHull jch = new JobaConvexHull(); // Konstruktor mit Dummyarray
			
			// Variablen für den JobaDrawPanel-Konstruktor beschaffen
			int cosysx = jch.getMaxXSoFar()[0] + 50;
			int cosysy = jch.getMaxYSoFar()[1] + 50;
			int[][] ptd = jch.getPoints();
			int[][] cptd = jch.getConvexHullPoints();
			int[][] lcptd = jch.getLeftHullSortedByY();
			int[][] rcptd = jch.getRightHullSortedByY();
			
			// Erwartung JobaDrawPanel-Konstruktor: int cosysx, int cosysy, int[][] ptd, int[][] cptd, int[][] lptd, int[][] rcptd
			JobaDrawPanel jdp = new JobaDrawPanel(cosysx, cosysy, ptd, cptd, lcptd, rcptd);
			jdp.setBackground(Color.blue);
			drawTabScrollPane.removeAll();
			drawTabScrollPane.add(jdp);
			drawTabScrollPane.revalidate();
			drawTabScrollPane.repaint();
		}
 
S

SlaterB

Gast
> drawTabScrollPane.add(jdp);

drawTabScrollPane.setViewPortView(jdp);
oder so
 

Jay1980

Bekanntes Mitglied
Okay danke, leider geht es immer noch nicht.

Ich habe versucht, die umfassende Berechnung rauszunehmen und das Problem einzukreisen...
Also das JTabbedPane Tab 'DrawPanel' ist weiss, das Optionen-Tab hat einen button mit der Action. Nun klick ich auf den Button und will ein neues JPanel in die ScrollPane laden. Das 'alte' weisse JPanel ist auch weg, man sieht aber nur einen grauen Hintergrund ohne meine JPanel+JLabel-Kombo.

Das ist der aktuelle Code, ich dachte das muesste so problemlos laufen oder was habe ich vergessen:
Java:
JPanel jdp = new JPanel();
			JLabel jdpLabel = new JLabel("Teststring");
			jdp.add(jdpLabel);
			
			drawTabScrollPane.removeAll();
			drawTabScrollPane.setViewportView(jdp);
			drawTabScrollPane.revalidate();
			drawTabScrollPane.repaint();
			tabbedPane.revalidate();
			tabbedPane.repaint();
 
S

SlaterB

Gast
vielleicht ist das neue JPanel von der Größe 1x1 Pixel, dann wird man auch nicht viel erkennen,
setPreferredSize könnte helfen, auch einen Border und/ oder eine Hintergrundfarbe zu setzen sorgt für minimale Sichtbarbkeit

falls noch nicht geklärt:
vollständiges Testprogramm bitte, möglichst kurz

edit:
du benutzt ein Standard-JPanel, kein eigenes mit paintComponent, das sollte dann wohl sichbar sein,

was ist mit
> tabbedPane.revalidate()
ist das ein wichtiges Objekt oder vielleicht eher unbeteiligt?
im Zweifel direkt auf das JFrame validate() aufrufen,
oder Testprogramm, läßt alle Fehlerquellen sofort aufdecken

edit 2:
hmm,
> drawTabScrollPane.revalidate();
steht da ja auch..
 
Zuletzt bearbeitet von einem Moderator:

Jay1980

Bekanntes Mitglied
Okay, ich habe mal eine Beispielklasse getippt, die man dann kompilieren kann und die das Problem nachstellt.

Java:
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.JTextArea;


public class Main implements ActionListener
{
	String dbs;
	JFrame mainFrame;
	JTabbedPane tabbedPane;
	JPanel drawTabPanel;
	JPanel optionTabPanel;
	JScrollPane drawTabScrollPane;
	JScrollPane optionTabScrollPane;
	JPanel debugTabPanel;
	
	

	public static void main(String[] args)
	{
		Main main = new Main();
		main.initialize();
	}
	
	public void initialize()
	{
		// mainFrame
		mainFrame = new JFrame("Konvexe Huelle");
		
		this.mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.mainFrame.setSize(1200, 900);
		
		Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
		this.mainFrame.setLocation( 
				(d.width - this.mainFrame.getSize().width)/2 , 
				(d.height - this.mainFrame.getSize().height)/2 );
		
		// JTabbedPane mit ScrollPanes
		tabbedPane = new JTabbedPane();
		
		// Reiter erzeugen samt Inhaltsbereichen
		drawTabPanel = new JPanel();
		optionTabPanel = new JPanel();
		debugTabPanel = new JPanel();
		drawTabScrollPane = new JScrollPane( drawTabPanel );
		optionTabScrollPane = new JScrollPane( optionTabPanel );
		
		// DrawTabPanel
		drawTabPanel.setBorder(BorderFactory.createLineBorder( Color.green ));
		drawTabPanel.setBackground(Color.white);
		
		// OptionTabPanel
		optionTabPanel.setBorder(BorderFactory.createLineBorder( Color.red ));
		JButton testBut = new JButton("Testbutton");
		testBut.addActionListener( this );
		optionTabPanel.add(testBut);
		optionTabPanel.revalidate();
		
		// DebuggingTab	
		dbs = "+++++ DebugString +++++\n";
		
		JTextArea debugTabPanelTextArea = new JTextArea(dbs, 15, 20);
		JScrollPane debugTabPanelScrollPane = new JScrollPane(debugTabPanelTextArea);
		debugTabPanel.add(debugTabPanelScrollPane);
		debugTabPanel.revalidate();
		debugTabPanel.repaint();
		
		// Reiter einhaengen
		tabbedPane.addTab( "Zeichenfläche", drawTabScrollPane );
		tabbedPane.addTab( "Optionen", optionTabScrollPane );
		tabbedPane.addTab( "Debugging", debugTabPanel );
		
		// Frame zusammenfuegen
		mainFrame.add(tabbedPane);
		mainFrame.setVisible(true);
	}
	
	public void actionPerformed(ActionEvent evt)
	{
		if( evt.getActionCommand() == "Testbutton")
		{
			JPanel jdp = new JPanel();
			jdp.setPreferredSize(new Dimension( 300, 300) );
			jdp.setBorder(BorderFactory.createLineBorder(Color.green));
			JLabel jdpLabel = new JLabel("Teststring");
			jdp.add(jdpLabel);
			
			drawTabScrollPane.removeAll();
			drawTabScrollPane.setViewportView(jdp);
			drawTabScrollPane.revalidate();
			drawTabScrollPane.repaint();
			tabbedPane.revalidate();
			tabbedPane.repaint();
		}
	}

}
 
S

SlaterB

Gast
ok, sieht so aus, als wäre
> drawTabScrollPane.removeAll();
schuld, damit entfernst du den inneren Aufbau, also z.B. den ViewportView, aus der GUI-Anzeige-Struktur,
dass mir das noch nie aufgefallen ist.., werde ich mir merken für zukünftige ähnliche Fragen ;)

removeAll() weg, setViewportView reicht
 
Status
Nicht offen für weitere Antworten.
Ä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
S JScrollPane --> Programm hängt sich beim scrollen auf AWT, Swing, JavaFX & SWT 2
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

Ähnliche Java Themen


Oben