Komponenten innerhalb eine JScrollpane werden auch ausserhalb davon gezeichnet!

JuliaOne

Mitglied
Hallo ihr...

ich hab folgendes Problem:

In initConnectors2() fülle ich eine JLayeredPane (innerPanel) mit JLayeredPane (b11) Elementen.
Diese steck ich dann wiederum in eine JScrollPane(scrollpane). Zuletzt kommt JScrollPane in das JPanel cc.

Das Ergebnis übergebe ich in der main Methode dem JPanel mainePane. Diese Pane wird einer weiteren JScrollPane (scrollpane) übergeben.
Leider muss das ganze so "umständlich" gemacht werden.

Jetzt aber zum Problem (evtl. Bug). Die Elemente innerhalb der JLayeredPane (innerPanel) werden auch ausserhalb des Bereiches gezeichnet. Was noch dazu kommt, die Elemente werden sogar auf der JMenuBar gezeichnet. Deshalb bin ich mir fast sicher das es ein Java Bug ist.

Bitte gibt mir Feedback wie ich da vorgehen muss.


(Ich hoffe der Codeausschnitt bringt irgendwas, hab das natürlich arg gekürzt)

public static void main(String[] args) {

JPanel mainPane = initConnectors2();
mainPane.setPreferredSize(new Dimension(10000, 10000));

JScrollPane scrollpane = new JScrollPane(mainPane,
ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);

getContentPane().add(scrollpane);
validate();
}

initConnectors2(){
JPanel cc = new JPanel();

ConnectorContainer innerPanel = new ConnectorContainer();
innerPanel.setPreferredSize(new Dimension(10000, 10000));

for (int i = 0; i < clustered.length; i++) {
JLayeredPane b11 = new JLayeredPane(label);
Dimension k = b11.getPreferredSize();
b11.setBounds(i * (width / 5) + 20, i*height, k.width, k.height);
innerPanel.add(b11);
}


JPanel backgroundPanel = new JPanel();
backgroundPanel.setSize(10000, 10000);
backgroundPanel.setBackground(new Color(28, 28, 28));

innerPanel.add(backgroundPanel, Integer.MIN_VALUE);

JScrollPane scrollpane = new ScrollPane(innerPanel,
ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,
ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
scrollpane.setBounds(10, 120, 100000, height - 300);
cc.add(scrollpane);

return cc;
}
}

Viele Grüße,

J.
 
Dass man die dicke, rote, mit einem
icon4.gif
markierte Nachricht
übersieht, kann doch eigentlich nicht sein.

Alles, was das Aussehen einer Swing-Component verändert (oder darauf zurückgreift) muss vom Event-Dispatch-Thread gemacht werden. Im einfachsten Fall: Alles, was in der main() steht, in ein
Code:
SwingUtilities.invokeLater(new Runnable()
{
    public void run()
    {
        // Hier der Code aus der main
    }
});
einwickeln.
 
Hallo Julia,

herzlich willkommen bei java-forum.org.

Mit JLayeredPane ist es durchaus möglich, auf die JMenuBar zu zeichnen. Deshalb ist das höchst wahrscheinlich kein Java Bug. In deinem Code kann ich aber kein derartiges Zeichnen feststellen. Mach doch bitte mal ein KSKB, damit man das überprüfen kann.

Und denk daran: Java™ Quelltext ist bitte in
Java:
-Tags zu schreiben: [code=Java]hier Java Code einfügen[ /JAVA]   (*)

Gruß,
André

(*) ohne das Leerzeichen vor dem /
 
Hi, du scheinst AWT mit Swing zu vermischen, vielleicht liegt es daran.

In den Zeilen hast du einmal JScrollPane und einmal nur ScrollPane geschrieben:

Java:
JScrollPane scrollpane = new ScrollPane(innerPanel,
ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,
ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
scrollpane.setBounds(10, 120, 100000, height - 300);
cc.add(scrollpane);
 
Hi...

vielen Dank für Eure schnelle Hilfe.

@Marco hast Recht. Hab nicht darauf geachtet...
Dein Tipp verändert das ganze leider nicht.

@Andre, ich weiss nicht, was du mit KSKB meinst 🙂

@paddelpirat...also ich wüsste nicht was an dem Ausschnitt den du kopiert hast AWT sein sollte. Wenn du ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED meinst. Das ist einfach eine Konstante, um das Scrollverhalten zu bestimmen und hat nichts mit AWT zu tun. Vielleicht stimmt das aber auch gar nicht.

Hier der Code noch einmal in den richtigen Tags. Da das nur ein Ausschnitt ist, weiss ich nicht ob ihr was damit anfangen könnt.

Java:
public static void main(String[] args) {

		JPanel mainPane = initConnectors2();
		mainPane.setPreferredSize(new Dimension(10000, 10000));
		
		JScrollPane scrollpane = new JScrollPane(mainPane,
				ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER,						ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);

		getContentPane().add(scrollpane);
		validate();
	}		
		
		initConnectors2(){
			JPanel cc = new JPanel();
		
			ConnectorContainer innerPanel = new ConnectorContainer();
	     	innerPanel.setPreferredSize(new Dimension(10000, 10000));
		
			for (int i = 0; i < clustered.length; i++) {
				JLayeredPane b11 = new JLayeredPane(label);
				Dimension k = b11.getPreferredSize();
				b11.setBounds(i * (width / 5) + 20, i*height, k.width, k.height);
			    innerPanel.add(b11);
			}
			
				
		     JPanel backgroundPanel = new JPanel();
		     backgroundPanel.setSize(10000, 10000);
		     backgroundPanel.setBackground(new Color(28, 28, 28));

	   		 innerPanel.add(backgroundPanel, Integer.MIN_VALUE);
	   		 
			 JScrollPane scrollpane = new ScrollPane(innerPanel,
			 ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,
			 ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
		     scrollpane.setBounds(10, 120, 100000, height - 300);
		     cc.add(scrollpane);
		
		   return cc;
				}
		}

Danke nochmal an euch...ich hoffe ihr habt weitere Tipps für mich..

LG
 
Ich meine bei dir im Code Zeile 33:

Java:
 JScrollPane scrollpane = new ScrollPane(innerPanel,

da steht "new ScrollPane(..." das müsste aber eine JScrollPane sein. Weil ScrollPane AWT ist...

Edit: Oder ist das nur ein Tippfehler in deinem Beispielcode? Weil laut Doku gibt es diesen Konstruktor gar nicht so in AWT, d.h. du müsstest eh eine Fehlermeldung bekommen ;-)
 
Zuletzt bearbeitet:

Neue Themen


Zurück
Oben