JInternalFrame in JScrollpane

Status
Nicht offen für weitere Antworten.

DeeDee0815

Bekanntes Mitglied
Hallo,

mit der Forensuche habe ich hierzu keine Lösung gefunden:

Ich habe ein JSplitPane mit einem JTree in einem JScrollPane und einem JDesktopPane.

Code:
		JScrollPane Tree = new JScrollPane(new Tree());
		JScrollPane Workspace = new JScrollPane(new Workspace());
		Tree.setPreferredSize(new Dimension(200, 400));		
		MainFrame.add(new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, true, Tree, Workspace), BorderLayout.CENTER);

Code:
import javax.swing.DefaultDesktopManager;
import javax.swing.JDesktopPane;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;

class Workspace
extends JFrame
{
	private static final long serialVersionUID = 1L;
	
	public Workspace()
	{
		DesktopFrame desktopframe = new DesktopFrame();
		desktopframe.addChild(new ChildFrame("Test"), 0, 0, 250, 250);
		add(desktopframe);
	}
}

class DesktopFrame
extends JFrame
{
	private static final long serialVersionUID = 1L;
	
	private JDesktopPane desktoppane;
	
	public DesktopFrame()
	{
		this.desktoppane = new JDesktopPane();
		desktoppane.setDesktopManager(new DefaultDesktopManager());
		setContentPane(desktoppane);
	}
	
	public void addChild(JInternalFrame child, int x, int y, int w, int h)
	{
		child.setLocation(x, y);
		child.setSize(w, h);
		child.setDefaultCloseOperation(JInternalFrame.DISPOSE_ON_CLOSE);
		desktoppane.add(child);
		child.setVisible(true);
	}
}

class ChildFrame
extends JInternalFrame
{
	private static final long serialVersionUID = 1L;

	public ChildFrame(String title)
	{
		super(title, true, true);
		setIconifiable(true);
		setMaximizable(true);
	}
}

Nach dieser Meldung zu Urteilen ist das Problem, dass ich ein Fenster nicht zu einem JScrollpane hunzufügen kann:

Code:
Exception in thread "main" java.lang.IllegalArgumentException: adding a window to a container
	at java.awt.Container.addImpl(Container.java:1022)
	at java.awt.Container.add(Container.java:935)
	at javax.swing.JFrame.addImpl(JFrame.java:545)
	at java.awt.Container.add(Container.java:352)
	at Workspace.<init>(Workspace.java:15)
	at Main.<init>(Main.java:66)
	at Main.main(Main.java:23)

Wenn ich das JScrollPane aber zu einem JDesktopPane mache, geht das auch nicht:

Code:
		JScrollPane Tree = new JScrollPane(new Tree());
		JDesktopPane Workspace = new JDesktopPane(new Workspace());
		Tree.setPreferredSize(new Dimension(200, 400));		
		MainFrame.add(new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, true, Tree, Workspace), BorderLayout.CENTER);

Wie kann ich meine InternalFrames in dieses JSplitPane stecken?

MfG
DeeDee0815
 

kleiner_held

Top Contributor
Das du ein JInternalFrame in ein JDesktopPane packen solltest ist schon richtig.
Dein Fehler beruht darauf, dass deine Klassen DesktopFrame und Workspace von JFrame erben und du ein DesktopFrame einem Workspace hinzufuegen willst - das funktioniert nicht (und macht auch keinen Sinn).
 

DeeDee0815

Bekanntes Mitglied
Danke für deine Hilfe. Aber leider verstehe ich das Problem noch immer nicht. Was Du gesagt hast, verstehe ich zwar, weiß aber nicht so ganz, wie man es anders machen kann.

Meine überlegung ist folgende:

Workspace() ruft DesktopFrame() auf: Ein JDesktopPane wird erstellt und von Workspace desktopframe genannt. Diesem fügt Workspace nun einen ChildFrame hinzu. Nun fügt Workspace mit add(desktopframe) die ganze geschichte seinem Aufrufer hinzu. Es liefert gewisser Maßen desktopframe zurück.

Ich muss dieses "desktopframe" nun in das JSplitPane stecken.

Code:
[...]Workspace Workspace = new Workspace();
[...]
MainFrame.add(new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, true, Tree, Workspace), BorderLayout.CENTER);
[...]

Doch es bleibt bei der Selben Meldung.
adding a window to a container.

Das heißt dann wohl, dass ich aus irgend welchen Gründen kein JDesktopPane in das JSplitPane stecke, sondern einen JInternalFrame...

Inzwischen sieht die Workspace.java so aus:
Code:
import javax.swing.DefaultDesktopManager;
import javax.swing.JDesktopPane;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;

class Workspace
extends JDesktopPane
{
	private static final long serialVersionUID = 1L;
	
	public Workspace()
	{
		DesktopFrame desktopframe = new DesktopFrame();
		desktopframe.addChild(new ChildFrame("Test"), 0, 0, 250, 250);
		this.add(desktopframe);
	}
}

class DesktopFrame
extends JFrame
{
	private static final long serialVersionUID = 1L;
	
	private JDesktopPane desktoppane;
	
	public DesktopFrame()
	{
		this.desktoppane = new JDesktopPane();
		desktoppane.setDesktopManager(new DefaultDesktopManager());
		setContentPane(desktoppane);
	}
	
	public void addChild(JInternalFrame child, int x, int y, int w, int h)
	{
		child.setLocation(x, y);
		child.setSize(w, h);
		child.setDefaultCloseOperation(JInternalFrame.DISPOSE_ON_CLOSE);
		desktoppane.add(child);
		child.setVisible(true);
	}
}

class ChildFrame
extends JInternalFrame
{
	private static final long serialVersionUID = 1L;

	public ChildFrame(String title)
	{
		super(title, true, true);
		setIconifiable(true);
		setMaximizable(true);
	}
}

Liegt das Problem an der Zeile

Code:
Workspace Workspace = new Workspace();

?

Oder liegt es an der Klasse Workspace()? Ich bräuchte noch einen Tipp...

MfG
DeeDee0815
 

André Uhres

Top Contributor
Du darfst auf keinen Fall einen JFrame nehmen, der ist für das Hauptfenster reserviert :wink:
Wenn du unbedingt über drei Ecken fahren willst, dan versuch's mal mit JPanel statt JFrame.
Die Demo fügt JDesktopPane direkt zum JSplitPane hinzu:
Code:
package desktop;
/*
* WorkspaceDemo.java
*/
import java.awt.*;
import javax.swing.*;
public class WorkspaceDemo extends JFrame {
    private JDesktopPane jDesktopPane1;
    private JInternalFrame jInternalFrame1;
    private JSplitPane jSplitPane1;
    private JTree jTree1;
    public WorkspaceDemo() {
        super("Workspace Demo");
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        setSize(400,300);
        setLocationRelativeTo(null);
        jSplitPane1 = new JSplitPane();
        jTree1 = new JTree();
        jDesktopPane1 = new JDesktopPane();
        jInternalFrame1 = new JInternalFrame();
        jSplitPane1.setLeftComponent(new JScrollPane(jTree1));
        jInternalFrame1.setVisible(true);
        jInternalFrame1.setBounds(120, 100, 120, 130);
        jDesktopPane1.add(jInternalFrame1, JLayeredPane.DEFAULT_LAYER);
        jSplitPane1.setRightComponent(jDesktopPane1);
        getContentPane().add(jSplitPane1, BorderLayout.CENTER);
    }
    public static void main(final String args[]) {new WorkspaceDemo().setVisible(true);}
}
 

DeeDee0815

Bekanntes Mitglied
Tja, da habe ichs mir wohl wirklich etwas umständlich gemacht. Eben war ich auch noch so dumm ein JDesktopPane in ein JDesktopPane zu stecken... Aber aus fehler lernt man schließlich. :cool:

Code:
JScrollPane Tree = new JScrollPane(new Tree());
JDesktopPane Workspace = new Workspace();
Tree.setPreferredSize(new Dimension(200, 400));		
MainFrame.add(new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, true, Tree, Workspace), BorderLayout.CENTER);

Code:
import javax.swing.JDesktopPane;
import javax.swing.JInternalFrame;
import javax.swing.JLayeredPane;

class Workspace
extends JDesktopPane
{
	private static final long serialVersionUID = 1L;
	
	public Workspace()
	{
		JInternalFrame frame = new JInternalFrame();
		frame.setBounds(100, 100, 100, 100);
		frame.setVisible(true);
		add(frame, JLayeredPane.DEFAULT_LAYER);
	}
}

Dann wiedermal vielen Dank für eure Hilfe und noch ein ausdrückliches "Dankesehr" an André Uhres für das Beispiel.

MfG
DeeDee0815
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
D JInternalFrame wechselt Position beim ersten Click AWT, Swing, JavaFX & SWT 0
J Mehrere JInternalFrame; GetValues AWT, Swing, JavaFX & SWT 1
L LookAndFeel JInternalFrame aussehen isSelected() true vs false AWT, Swing, JavaFX & SWT 0
X JInternalFrame vor Java2D-Zeichnung langsam bzw. Gui friert ein AWT, Swing, JavaFX & SWT 1
G Swing JInternalFrame AWT, Swing, JavaFX & SWT 0
R Custome TitlePane JInternalFrame - ControlButton AWT, Swing, JavaFX & SWT 2
B JInternalFrame Focus setzten geht nicht AWT, Swing, JavaFX & SWT 2
J Swing JInternalFrame modal setzen? AWT, Swing, JavaFX & SWT 13
J Swing JInternalFrame schließen ändern? AWT, Swing, JavaFX & SWT 7
J Swing Fokus JInternalFrame fehlerhaft AWT, Swing, JavaFX & SWT 4
G JInternalframe geöffnet oder nicht? AWT, Swing, JavaFX & SWT 4
G Swing und MDI mit JInternalFrame AWT, Swing, JavaFX & SWT 11
H Swing JInternalFrame, JDesktopPane und ein BorderLayout AWT, Swing, JavaFX & SWT 2
R Problem beim Anzeigen von Bildern auf JInternalFrame AWT, Swing, JavaFX & SWT 6
eskimo328 Java6 Methode in Java5 verwenden (memory leak JInternalFrame) AWT, Swing, JavaFX & SWT 4
A Swing getInsets() JInternalFrame AWT, Swing, JavaFX & SWT 2
R Swing JInternalFrame Opaque AWT, Swing, JavaFX & SWT 6
M JInternalFrame - Handhabung? AWT, Swing, JavaFX & SWT 5
algorismi JInternalframe Icon AWT, Swing, JavaFX & SWT 14
S JInternalFrame oder JTextArea neu laden AWT, Swing, JavaFX & SWT 2
V JInternalFrame wird überzeichnet AWT, Swing, JavaFX & SWT 8
T Neuen JInternalFrame von JLabel "herunterziehen" AWT, Swing, JavaFX & SWT 6
T JInternalframe auf DropTarget droppen? AWT, Swing, JavaFX & SWT 7
O Swing JInternalFrame komplett neu laden AWT, Swing, JavaFX & SWT 3
B JInternalFrame - Maximieren AWT, Swing, JavaFX & SWT 11
X Grafikfehler mit JInternalFrame (Überlagerungen) AWT, Swing, JavaFX & SWT 2
B Swing Image als Hintergrund im JInternalFrame - Problem AWT, Swing, JavaFX & SWT 3
J Swing JInternalFrame - mit DesktopManager maximieren AWT, Swing, JavaFX & SWT 3
J Swing JInternalFrame - Bug: getDesktopManager.deiconify(...) AWT, Swing, JavaFX & SWT 2
W JInternalFrame + JList Problem AWT, Swing, JavaFX & SWT 5
H Swing JInternalFrame aus JFrame ziehen AWT, Swing, JavaFX & SWT 6
N JInternalFrame minimieren und schließen AWT, Swing, JavaFX & SWT 2
T JFrame als JInternalFrame darstellen AWT, Swing, JavaFX & SWT 2
K Swing JInternalFrame und LayoutManager AWT, Swing, JavaFX & SWT 6
C Zeichnen über JInternalFrame der ICEpdf-Dokument anzeigt AWT, Swing, JavaFX & SWT 3
T Aussehen von JFrame bzw JInternalFrame ändern... wie? AWT, Swing, JavaFX & SWT 23
J Swing JInternalFrame AWT, Swing, JavaFX & SWT 5
S Swing JInternalFrame: Mehrere Probleme AWT, Swing, JavaFX & SWT 3
S Swing JInternalFrame: Titelleiste entfernen AWT, Swing, JavaFX & SWT 5
R Swing JFrame oder JInternalFrame? AWT, Swing, JavaFX & SWT 13
B JInternalFrame resize event AWT, Swing, JavaFX & SWT 2
X JInternalFrame AWT, Swing, JavaFX & SWT 3
G JInternalFrame AWT, Swing, JavaFX & SWT 2
W JInternalFrame alleine funktionsfähig AWT, Swing, JavaFX & SWT 5
A JSplitPane in JInternalFrame AWT, Swing, JavaFX & SWT 2
G JInternalFrame und beinhaltende Komponenten 'abschalten' AWT, Swing, JavaFX & SWT 2
K Tab von JPanel nach JInternalFrame AWT, Swing, JavaFX & SWT 2
M JInternalFrame Titel sichtbar setzen AWT, Swing, JavaFX & SWT 2
K JInternalFrame - schwarzer Bildschirm AWT, Swing, JavaFX & SWT 2
M JInternalFrame ohne Titelbalken AWT, Swing, JavaFX & SWT 5
A erneutes Öffnen jInternalFrame: illegal component position AWT, Swing, JavaFX & SWT 4
S Kontextmenu im JInternalFrame unterdrücken AWT, Swing, JavaFX & SWT 5
G Layerproblem JInternalFrame AWT, Swing, JavaFX & SWT 2
X Externe Anwendungen in JInternalframe starten. AWT, Swing, JavaFX & SWT 5
T JInternalFrame Vollbild Problem AWT, Swing, JavaFX & SWT 4
X Relative positionierung in einem JInternalFrame AWT, Swing, JavaFX & SWT 3
J JInternalFrame "schimmert" durch AWT, Swing, JavaFX & SWT 4
D JInternalFrame iconified Position nach parent-resize AWT, Swing, JavaFX & SWT 2
C Hilfe bei JInternalFrame AWT, Swing, JavaFX & SWT 6
J JInternalFrame überlagert/unterlagert anderen Elementen AWT, Swing, JavaFX & SWT 2
DeeDee0815 setContentPane()-Problem bei JInternalFrame AWT, Swing, JavaFX & SWT 2
W Unterdrückung von FrameIcon-Funktion im JInternalFrame AWT, Swing, JavaFX & SWT 5
F JInternalFrame Look and Feel AWT, Swing, JavaFX & SWT 3
W Realisierung Gradient in der Titlebar JInternalFrame AWT, Swing, JavaFX & SWT 7
T JInternalFrame Konflikt mit LayoutManager AWT, Swing, JavaFX & SWT 5
T JInternalFrame und Iconified AWT, Swing, JavaFX & SWT 10
C Tooltip nur anzeigen, wenn JInternalFrame minimiert AWT, Swing, JavaFX & SWT 3
M JInternalFrame mouseEntered/mouseExited AWT, Swing, JavaFX & SWT 8
S Eine Art JInternalFrame in JSplitPane AWT, Swing, JavaFX & SWT 3
G Problem bei JTable in JInternalFrame AWT, Swing, JavaFX & SWT 4
megachucky JInternalFrame modal setzen AWT, Swing, JavaFX & SWT 3
megachucky JInternalFrame Größe und Location nicht einstellbar AWT, Swing, JavaFX & SWT 8
T JPanel mit paintComponent methode im JInternalFrame AWT, Swing, JavaFX & SWT 3
R Rückgabewert TreeSelectionListener für JInternalFrame AWT, Swing, JavaFX & SWT 4
J Applet in JInternalFrame laden AWT, Swing, JavaFX & SWT 9
B JInternalFrame in den Vordergrund rücken + Focus AWT, Swing, JavaFX & SWT 15
F Anzeigen eines JInternalFrame auf einen JFrame AWT, Swing, JavaFX & SWT 3
B JInternal Frame laden von anderem JInternalFrame AWT, Swing, JavaFX & SWT 3
A JInternalFrame setMaximizeable(false) wehrt sich AWT, Swing, JavaFX & SWT 2
S JInternalFrame AWT, Swing, JavaFX & SWT 8
welterde Menü in der Titelleiste des JInternalFrame AWT, Swing, JavaFX & SWT 4
S Problem, neuen JInternalFrame zur Laufzeit anzuzeigen AWT, Swing, JavaFX & SWT 8
M Cursor im deaktivierten JInternalFrame AWT, Swing, JavaFX & SWT 2
V JInternalFrame in einen Panel? AWT, Swing, JavaFX & SWT 2
C Scrollbalken bei einem JInternalFrame AWT, Swing, JavaFX & SWT 6
G JInternalFrame mit Doppelklick schließen möglich? AWT, Swing, JavaFX & SWT 2
D JInternalFrame unverschiebbar AWT, Swing, JavaFX & SWT 7
G JInternalFrame Fenster Status von Icon nach Normal? AWT, Swing, JavaFX & SWT 5
G lightweight >> heavyweight bei JInternalFrame für JMen AWT, Swing, JavaFX & SWT 13
P JInternalFrame: Verhindern das man es verschieben kann AWT, Swing, JavaFX & SWT 2
K JInternalFrame: internes Fenster zentrieren AWT, Swing, JavaFX & SWT 2
D JInternalFrame beim Öffnen nicht aktiv! AWT, Swing, JavaFX & SWT 5
A Probleme mit JInternalFrame AWT, Swing, JavaFX & SWT 5
javasdann Höhe von Titlebar in jInternalFrame ändern AWT, Swing, JavaFX & SWT 5
S Auf Komponenten eines JInternalFrame zugreifen AWT, Swing, JavaFX & SWT 2
A Ich kann kein JInternalFrame anzeigen ! AWT, Swing, JavaFX & SWT 7
P JInternalFrame - Problem AWT, Swing, JavaFX & SWT 3
F Listener für JPanel im JInternalFrame AWT, Swing, JavaFX & SWT 5
S finalizie() bei JInternalFrame wird nicht aufgerufen ! AWT, Swing, JavaFX & SWT 11
A JInternalFrame AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben