Verzweiflung mit JScrollPane

Status
Nicht offen für weitere Antworten.
K

ksh84

Gast
Hallo alle zusammen!

habe Probleme mit dem JScrollPane. die Scrollbalken kann ich mir inzwischen immer anzeigen lassen, aber leider nimmt er die Größenveränderungen des zugehören JPanels nicht auf, so dass ich nicht scrollen kann! habe inzwischen alles versucht und komme nicht mehr weiter.
(lese ein XML-Dokument beim Öffnen ein -> die boolsche Variable start wird auf true gesetzt)

wer weiß was?!

Code:
	private JScrollPane createPanel3() {
		panel3 = new JPanel() {
			protected void paintComponent(Graphics g) {
				//	Lesen der aktuellen Breite und Höhe des Panels
				int width = panel3.getWidth();
				int height = panel3.getHeight();
				//	Ende der Box, Anfang der neuen Box
				//	-> ergeben Koordinaten von Pfeil
				int ende=0, anfang, help;
				
				//	Erstellen des Pertchart
				if (start == true) {
					readXML(file);
					for (int i = 0; i < d.length; i++) {
						//	 Box wird gezeichnet; Width wird kleiner
						//	durch Start und Ende
						box(g, i, 70+150*i, height/2-50, 
								height/2+10, height/2, 105, 60);
						g.setColor(Color.white);
						g.setFont(new Font("Serif", Font.BOLD, 12));
						Linebreak.Text(d[i], 18, g, i, 74+150*i, height/2-35);
						g.drawString(t[i], 95+150*i, height/2+15);
						anfang = 70+150*i;
						ende = 175+150*(i-1);
						
						panel3.setMinimumSize(new Dimension(width, ende+205));
						//	Pfeil am Anfang
						if(i==0)
							arrow(g, 40, height/2, 70, height/2, 5, 5);
						//	Pfeile zwischen den Prozessschritten
						else if (i>=1 && i<d.length) {
							arrow(g, ende, height/2, anfang, height/2, 5, 5);
							if(i==d.length-1)
								//	Pfeil am Ende
								arrow(g, 175+130/d.length*i, 
										height/2, 40, height/2, 5, 5);
						}
						if(d.length==1)
							arrow(g, 155+130/d.length*i, 
									height/2, 40, height/2, 5, 5);
					}
					oval(g, ende+105+60, height/2-10, 40, 20);
					
				}
				else {
					arrow(g, 40, height/2, width-40, height/2, 10, 10);
					oval(g, width-40, height/2-10, 40, 20);
				}
				
				//	Legende wird immer gezeichnet
				g.setColor(Color.lightGray);
				g.drawLine(0, height-60, width, height-60);
				g.drawLine(0, height-59, width, height-59);
				g.drawLine(0, height-58, width, height-58);
				//	Rechtecke
				Color blau = new Color(0, 100, 255);
				g.setColor(blau);
				g.fillRect(100, height-35, 20, 20);
				Color hellblau = new Color(0, 200, 255);
				g.setColor(hellblau);
				g.fillRect(290, height-35, 20, 20);
				Color grün = new Color(100, 240, 0);
				g.setColor(grün);
				g.fillRect(380, height-35, 20, 20);
				//	Beschriftung
				g.setColor(Color.black);
				g.setFont(new Font("Serif", Font.BOLD, 15));
				g.drawString("Legende:", 10, height-20);
				g.drawString("Zusammenbauschritt", 130, height-20);
				g.drawString("Dauer", 320, height-20);
				g.drawString("Features und Verbindungsinformation", 410, 
						height-20);
			}
		};
        //Put the drawing area in a scroll pane.
        JScrollPane scroller = new JScrollPane(panel3, ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
        scroller.setBackground(Color.white);
        scroller.setPreferredSize(new Dimension(700,1000));
        scroller.setViewportView(panel3);
		return scroller;
	}
 

André Uhres

Top Contributor
1. Ins paintComponent kommt dies rein:
Code:
           protected void paintComponent(Graphics g) {
                super.paintComponent(g);
                ...
2. Dies kommt weg:
Code:
        scroller.setViewportView(panel3);
3. Dies kommt in createPanel3 (nicht in paintComponent !)
Code:
        panel3.setPreferredSize(new Dimension(...));
 
K

ksh84

Gast
also, bei den ersten zwei ist ja kein Problem - wobei du mir vielleicht erstens erklären könntest....

und wie ist das mit 3.? kommt da dann die sich verändernen Abmaße des Panels rein? hab es gerade versucht, aber dann bekomme ich Probleme mit den Variablen!!!
 

André Uhres

Top Contributor
zu 1: Das erste was du in paintComponent normalerweise tust,
ist das off-screen Bild mit super.paintComponent zu bereinigen,
sonst kann es sein, daß das Bild nicht sauber rauskommt.

zu 3: Du kannst das "panel3.setPreferredSize(new Dimension(...))" auch in paintComponent machen.
Aber nachdem das JFrame mit frame.setVisible(true) sichtbar gemacht wurde,
musst du dann noch ein frame.validate() machen, sonst greift's nischt :wink:
 
K

ksh84

Gast
ah, ok!

mal wieder 3. ;-(
wenn ich es in paintComponent reinstecke, funkt es nicht! und die Variablen werden irgendwie nicht gescheit übergeben, so dass es andersrum auch nicht funktioniert...

ach menno!!!
 

André Uhres

Top Contributor
Komisch...mein Test klappt aber ???:L
Code:
/*
 * ScrollerTest.java
 */
import java.awt.*;
import javax.swing.*;
public class ScrollerTest {
    public ScrollerTest() {
        JFrame f = new JFrame("Scroller Test");
        f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        f.setSize(400,300);
        f.setLocationRelativeTo(null);
        f.add(createPanel3());
        f.setVisible(true);
        
            //validate ist notwendig:
            f.validate();
    }
    private JScrollPane createPanel3() {
        panel3 = new JPanel() {
            protected void paintComponent(Graphics g) {
                super.paintComponent(g);
                
                //   Lesen der aktuellen Breite und Höhe des Panels
                int width = panel3.getWidth();
                int height = panel3.getHeight();
                //   Ende der Box, Anfang der neuen Box
                //   -> ergeben Koordinaten von Pfeil
                int ende=0, anfang, help;
                
                //   Erstellen des Pertchart
                //...
                
                    //Dies ist nur zum testen:
                    panel3.setPreferredSize(new Dimension(800,200));
                
                //   Legende wird immer gezeichnet
                g.setColor(Color.lightGray);
                g.drawLine(0, height-60, width, height-60);
                g.drawLine(0, height-59, width, height-59);
                g.drawLine(0, height-58, width, height-58);
                //   Rechtecke
                Color blau = new Color(0, 100, 255);
                g.setColor(blau);
                g.fillRect(100, height-35, 20, 20);
                Color hellblau = new Color(0, 200, 255);
                g.setColor(hellblau);
                g.fillRect(290, height-35, 20, 20);
                Color grün = new Color(100, 240, 0);
                g.setColor(grün);
                g.fillRect(380, height-35, 20, 20);
                //   Beschriftung
                g.setColor(Color.black);
                g.setFont(new Font("Serif", Font.BOLD, 15));
                g.drawString("Legende:", 10, height-20);
                g.drawString("Zusammenbauschritt", 130, height-20);
                g.drawString("Dauer", 320, height-20);
                g.drawString("Features und Verbindungsinformation", 410,
                        height-20);
            }
        }
        ;
        //Put the drawing area in a scroll pane.
        JScrollPane scroller = new JScrollPane(panel3, ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
        scroller.setBackground(Color.white);
        scroller.setPreferredSize(new Dimension(700,1000));
        return scroller;
    }
    public static void main(String args[]) {new ScrollerTest();}
    private JPanel panel3;
    private boolean start = true;
}
 

André Uhres

Top Contributor
Es ist nicht zu empfehlen setPreferredSize in paintComponent aufzurufen.
Besser ist es, die Methode getPreferredSize zu überschreiben und dort die ganze Rechnerei
für die Grösse des Panels aufzurufen.
Nach dem Öffnen einer Datei das revalidate nicht vergessen:
Code:
//	Tab für Übersicht mit Pertchart
    private JScrollPane createPanel3() {
        panel3 = new JPanel() {
            public Dimension getPreferredSize(){
                Graphics g = getGraphics();
                pertchart(g);
                return new Dimension(ende+205, height);
            }
            private void pertchart(Graphics g){
                if (start == true) {
                    readXML(file);
                    for (int i = 0; i < d.length; i++) {
                        //	 Box wird gezeichnet; Width wird kleiner
                        //	durch Start und Ende
                        box(g, i, 70+150*i, height/2-50,
                                height/2+10, height/2, 105, 60);
                        g.setColor(Color.white);
                        g.setFont(new Font("Serif", Font.BOLD, 12));
                        Linebreak.Text(d[i], 18, g, i, 74+150*i, height/2-35);
                        g.drawString(t[i], 95+150*i, height/2+15);
                        anfang = 70+150*i;
                        ende = 175+150*(i-1);
                        //	Pfeil am Anfang
                        if(i==0)
                            arrow(g, 40, height/2, 70, height/2, 5, 5);
                        //	Pfeile zwischen den Prozessschritten
                        else if (i>=1 && i<d.length) {
                            arrow(g, ende, height/2, anfang, height/2, 5, 5);
                            if(i==d.length-1)
                                //	Pfeil am Ende
                                arrow(g, 175+130/d.length*i,
                                        height/2, 40, height/2, 5, 5);
                        }
                        if(d.length==1)
                            arrow(g, 155+130/d.length*i,
                                    height/2, 40, height/2, 5, 5);
                    }
                    oval(g, ende+105+60, height/2-10, 40, 20);
                    
                } else {
                    arrow(g, 40, height/2, width-40, height/2, 10, 10);
                    oval(g, width-40, height/2-10, 40, 20);
                }
                
            }
            private int width,height,ende,anfang,help;
            protected void paintComponent(Graphics g) {
                super.paintComponent(g);
                //	Lesen der aktuellen Breite und Höhe des Panels
                width = panel3.getWidth();
                height = panel3.getHeight();
                //	Ende der Box, Anfang der neuen Box
                //	-> ergeben Koordinaten von Pfeil
                ende=0;
                
                //	Erstellen des Pertchart
                pertchart(g);
                
                //	Legende wird immer gezeichnet
                g.setColor(Color.lightGray);
                g.drawLine(0, height-60, width, height-60);
                g.drawLine(0, height-59, width, height-59);
                g.drawLine(0, height-58, width, height-58);
                //	Rechtecke
                Color blau = new Color(0, 100, 255);
                g.setColor(blau);
                g.fillRect(100, height-35, 20, 20);
                Color hellblau = new Color(0, 200, 255);
                g.setColor(hellblau);
                g.fillRect(290, height-35, 20, 20);
                Color grün = new Color(100, 240, 0);
                g.setColor(grün);
                g.fillRect(380, height-35, 20, 20);
                //	Beschriftung
                g.setColor(Color.black);
                g.setFont(new Font("Serif", Font.BOLD, 15));
                g.drawString("Legende:", 10, height-20);
                g.drawString("Zusammenbauschritt", 130, height-20);
                g.drawString("Dauer", 320, height-20);
                g.drawString("Features und Verbindungsinformation", 410,
                        height-20);
            }
        };
        
        //Put the drawing area in a scroll pane.
        JScrollPane scroller = new JScrollPane(panel3, ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
        scroller.setBackground(Color.white);
        scroller.setPreferredSize(new Dimension(700,1000));
        return scroller;
    }

    public void Oeffnen() {
        ...
        panel3.revalidate();
    }
 
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

Neue Themen


Oben