Swing JInternalFrame

Status
Nicht offen für weitere Antworten.

Jay1980

Bekanntes Mitglied
Servus,

irgendwie krieg ich es nicht hin den JInternalFrame so zu setzen wie ich will. Da muss es noch eine Verständnislücke geben, was das Zusammenspiel aus Container, ContentPane, JInternalFrame und den Layoutmanager des JFrames zu geben.

Einmal hier schon etwas Code wie ich es in einer Methode umzusetzen zu versucht habe, ich habe eine Gui aus einem JFrame, welcher einen Layoutmanager und viele JPanels fasst, jetzt soll beim Aufruf eines bestimmten Menueeintrags ein JInternalFrame erscheinen und zwar 'schwebend' vor allen.

Aktuell erscheint der JInternalFrame hinter einem JPanel und wenn ich es in den Fokus nehme ist es da. Allerdings ist es gefangen in dem JPanel und wenn ich den JInternalFrame bewege dann rutscht er mir auch hinter die anderen Panels.

Ich komme da nicht weiter, habe schon viel gelesen und probiert. Mal schauen ob ich alles richtig habe: um einen JInternalFrame zu erzeugen muss ich diesen an eine ContentPane andocken, das mach ich dass ich den Hauptframe hole und getContentPane() aufrufe und das Ergebnis in einem Containerobjekt abspeicher. Vorher erzeuge ich ein JDesktop-Objekt, dieses adde ich dann zu dem Container aus dem getContentPane()-Aufruf. Dann erzeuge ich die JInternalFrame-Objekte und hänge diese an das desktop-Objekt, dabei achte ich darauf dass immer Größe des JInternalFrames und die Sichtbarkeit gesetzt sind.

Nach dem Lesen meiner Unterlagen frage ich mich, ob mein Wunsch eine Gui aus JPanels auf einem JFrame und JInternalFrames auf dem gleichen JFrame überhaupt sauber ist, oder ob man da lieber entweder oder macht, also nur JInternalFrames nutzt (diese MID-Applikation) oder einen JFrame mit diversen JPanels.

Eine weitere Ursache für das für mich unerklärliche Verhalten des JInternalFrames sehe ich im Layoutmanager der Gui - da habe ich das BorderLayout und der Quelltext-Ausschnitt bezieht sich auf den CENTER-Bereich, da ist dann der JInternalFrame auch gefangen, aber eigentlich will ich den ja ganz oben haben.

Dann gibt es noch etwas was ich nicht verstehe: ich sage dem JInternalFrame, dass er resizeable sein soll und wenn ich den JInternalFrame an JPanel hänge, also nicht an ein JDesktopPane, dann seh ich diesen zwar, aber wenn ich mittels Mausklick die Größe ändere, dann springt mir die Größe nach loslassen der Maus wieder zurück.

Danke für den ein oder anderen Hinweis, ich bin da mit meinem Latein echt am Ende.
Java:
			String debugString = new String();
			debugString = jobaConvexHullObject.getDebugString();
			
			Container container = frame.getContentPane();
			JDesktopPane desktop = new JDesktopPane();
			container.add( desktop );
			
			JInternalFrame debugFrame = new JInternalFrame( 
					"Debug-InternalFrame-Convex-Hull",  // title 
					true, // resizeable 
					true, // closeable 
					true, // maximizeable
					true // iconifiable, minimierbar
					);
			debugFrame.setSize(600, 200);
			
			Font debugFrameFont = new Font("Nimbus Mono L", Font.PLAIN, 12 );
			
			JTextArea debugFrameTextArea = new JTextArea();
			JScrollPane debugFrameScrollPane = new JScrollPane( debugFrameTextArea ); // ScrollPane die TextArea geben
			
			debugFrameTextArea.setFont(debugFrameFont);
			debugFrameTextArea.setEditable(false);
			debugFrameTextArea.setText(debugString + debuggingStringFromJobaGuiToJobaConvexHull + debuggingStringFromJobaConvexHullToJobaGui);
			
			debugFrame.add(debugFrameScrollPane); // ScrollPane einhängen bei JIF
			debugFrame.setVisible(true);	
			
			
			desktop.add( debugFrame );
			
			this.centerPanel.add( convexHullPanel );
			this.centerPanel.revalidate();
			this.centerPanel.repaint();
 

André Uhres

Top Contributor
jetzt soll beim Aufruf eines bestimmten Menueeintrags ein JInternalFrame erscheinen und zwar 'schwebend' vor allen.
Versuch's mal auf dem LayeredPane, etwa so:
Java:
...
public class TestInternalFrame extends JFrame {
    private JInternalFrame internalFrame;
...
        internalFrame = new JInternalFrame("JInternalFrame", true, true, true);
        internalFrame.setBounds(100, 100, 200, 150);
        getLayeredPane().add(internalFrame, JLayeredPane.DEFAULT_LAYER);
        btShow.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
                internalFrame.setVisible(true);
            }
        });
...
"iconifiable" funktioniert dann zwar nicht. Das ist aber nicht schlimm, denn "closeable" funktioniert und es ist ja eh ein Menüeintrag/Button da, um den Internalframe sichtbar zu machen.
 
Zuletzt bearbeitet:

Jay1980

Bekanntes Mitglied
Uff kompilierbares Beispiel ist natürlich so eine Sache, da ja die gesamte Gui-Klasse wichtig ist, daher folgen hier mal meine rund 1100 Zeilen.

Java:
package jobaapp;

import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.URL;
import java.net.MalformedURLException;
import javax.swing.*;

/**
 * JobaGui
 * 
 * Die Klasse stellt eine dumme Gui.
 * 
 * @author jay
 * @version 0.2
 *
 */

public class JobaGui implements ActionListener 
{

	/** Fenster der Gui */
	private JFrame frame;

	/** Menu Container */
	private JMenuBar menuBar;

	/** 
	 * Panel der Hauptzeichenflächen, die dann die Container halten
	 * in denen wirklich geschrieben wird.
	 */
	private JPanel panelCenter;
	private JPanel panelStart;
	private JPanel panelRight;
	private JPanel panelBottom;
	private JPanel panelLeft;

	/** Hauptbereich  */
	private JPanel centerPanel;

	/** Headerbereich */
	private JPanel headerPanel;

	/** StatusPanel, also das Panel auf der rechten Seite */ 
	private JPanel statusPanel;
	private JLabel textStatusPanelLabel;

	/** FooterPanel */
	private JPanel footerPanel;

	/** OptionPanel auf der linken Seite */
	private JPanel optionPanel;
	
	/** Textfelder zur Parameterübergabe, analog zu $_POST in PHP */
	private JTextField dollarPostStringOne;
	private JTextField dollarPostStringTwo;

	/** Konstruktor ohne Parameter */
	public JobaGui()
	{
		// Frame erzeugen
		JFrame frame = new JFrame( "JobaApp" );
		this.frame = frame;
		frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );

		// Menu erzeugen
		this.menuBar = new JMenuBar();

		JMenu fileMenu = new JMenu( "Datei" );
		JMenu editMenu = new JMenu( "Bearbeiten" );
		JMenu actionMenu = new JMenu( "Anwendungen" );
		JMenu extrasMenu = new JMenu( "Extras" );
		JMenu helpMenu = new JMenu( "Hilfe" );

		// Submenus anlegen
		// Submenu File Menu
		JMenuItem fileSubMenuOne = new JMenuItem( "Neu ..." ); // TODO
		JMenuItem fileSubMenuTwo = new JMenuItem( "Speichern"); // TODO
		JMenuItem fileSubMenuThree = new JMenuItem( "Speichern unter ..."); // TODO
		JMenuItem fileSubMenuFour = new JMenuItem( "Beenden"); // TODO

		fileMenu.add(fileSubMenuOne);
		fileMenu.add(fileSubMenuTwo);
		fileMenu.add(fileSubMenuThree);
		fileMenu.add(fileSubMenuFour);

		// Submenu editMenu
		JMenuItem editSubMenuOne = new JMenuItem( "Rückgängig machen" ); // TODO
		//bearbeitenSubMenuEins.addActionListener(this); // TODO
		editMenu.add( editSubMenuOne );

		// Submenu actionMenu with subSubMenu
		JMenu actionSubMenuOne = new JMenu( "Bioinformatik" );
		JMenu actionSubMenuTwo = new JMenu( "Gesundheit" );
		JMenu actionSubMenuTwoPointFive = new JMenu( "Geometrie" );
		JMenu actionSubMenuThree = new JMenu( "Kryptographie");
		JMenu actionSubMenuFour = new JMenu( "Mathematik" );
		
		JMenu actionSubSubMenuOne = new JMenu( "Algorithmen" );
		JMenuItem actionSubSubMenuOneItemOne = new JMenuItem( "Dotplot" );
		JMenuItem actionSubSubMenuOneItemOnePointFive = new JMenuItem("Levenshtein");
		JMenuItem actionSubSubMenuOneItemTwo = new JMenuItem( "Needleman-Wunsch");
		actionSubSubMenuOneItemOne.addActionListener(this);
		actionSubSubMenuOneItemOnePointFive.addActionListener(this);
		actionSubSubMenuOneItemTwo.addActionListener(this);
		
		JMenu actionSubSubMenuTwo = new JMenu( "Algorithmen" );
		JMenuItem actionSubSubMenuTwoItemOne = new JMenuItem( "Body-Mass-Index" );
		JMenuItem actionSubSubMenuTwoItemTwo = new JMenuItem( "Broca-Index" );
		actionSubSubMenuTwoItemOne.addActionListener( this );
		actionSubSubMenuTwoItemTwo.addActionListener( this );
		
		JMenu actionSubSubMenuTwoPointFive = new JMenu( "Algorithmen");
		JMenuItem actionSubSubMenuTwoPointFiveItemOne = new JMenuItem( "Convex-Hull");
		actionSubSubMenuTwoPointFiveItemOne.addActionListener( this );
		
		JMenu actionSubSubMenuThree = new JMenu( "Algorithmen");
		JMenuItem actionSubSubMenuThreeItemOne = new JMenuItem( "Cäsar-Chiffre" );
		JMenuItem actionSubSubMenuThreeItemTwo = new JMenuItem( "ROT13");
		actionSubSubMenuThreeItemOne.addActionListener(this);
		actionSubSubMenuThreeItemTwo.addActionListener(this);

		JMenu actionSubSubMenuFour = new JMenu ( "Algorithmen" );
		JMenuItem actionSubSubMenuFourItemOne = new JMenuItem( "Fibonacci-Folge" );
		actionSubSubMenuFourItemOne.addActionListener(this);
		
		// Einhängeoperationen der Menus
		actionSubSubMenuOne.add(actionSubSubMenuOneItemOne);
		actionSubSubMenuOne.add(actionSubSubMenuOneItemOnePointFive);
		actionSubSubMenuOne.add(actionSubSubMenuOneItemTwo);
		actionSubMenuOne.add(actionSubSubMenuOne);
		
		actionSubSubMenuTwo.add( actionSubSubMenuTwoItemOne );
		actionSubSubMenuTwo.add( actionSubSubMenuTwoItemTwo );
		actionSubMenuTwo.add( actionSubSubMenuTwo );
		
		actionSubSubMenuTwoPointFive.add( actionSubSubMenuTwoPointFiveItemOne );
		actionSubMenuTwoPointFive.add( actionSubSubMenuTwoPointFive );
		
		actionSubSubMenuThree.add( actionSubSubMenuThreeItemOne);
		actionSubSubMenuThree.add( actionSubSubMenuThreeItemTwo);
		actionSubMenuThree.add( actionSubSubMenuThree );
		
		actionSubSubMenuFour.add( actionSubSubMenuFourItemOne );
		actionSubMenuFour.add( actionSubSubMenuFour );
		
		actionMenu.add( actionSubMenuOne );
		actionMenu.add( actionSubMenuTwo );
		actionMenu.add( actionSubMenuTwoPointFive);
		actionMenu.add( actionSubMenuThree);
		actionMenu.add( actionSubMenuFour );
		
		// Submenu extraMenu
		JMenu extrasSubMenuOne = new JMenu( "Look and Feel wechseln" );
		JMenuItem extrasSubSubMenuOne = new JMenuItem( "Standard-LAF");
		JMenuItem extrasSubSubMenuTwo = new JMenuItem( "Metal-LAF");
		//extrasSubSubMenuZwei.addActionListener(this); // Action

		extrasSubMenuOne.add(extrasSubSubMenuOne);
		extrasSubMenuOne.add(extrasSubSubMenuTwo);
		extrasMenu.add( extrasSubMenuOne);

		// submenu helpMenu
		JMenuItem helpSubMenuOne = new JMenuItem( "Dokumentation" );
		helpSubMenuOne.addActionListener(this);
		helpMenu.add(helpSubMenuOne);

		// add menus to MenuBar
		this.menuBar.add(fileMenu);
		this.menuBar.add(editMenu);
		this.menuBar.add(actionMenu);
		this.menuBar.add(extrasMenu);
		this.menuBar.add(helpMenu);
		frame.setJMenuBar(this.menuBar);

		// Use BorderLayoutManager
		frame.setLayout( new BorderLayout(5, 5));

		// Set JavaLookAndFeel
		JFrame.setDefaultLookAndFeelDecorated(false);

		// Komponentenpanels
		this.panelCenter = 	new JPanel();
		this.panelStart = 	new JPanel();
		this.panelLeft = 	new JPanel();
		this.panelRight = 	new JPanel();
		this.panelBottom = 	new JPanel();

		// build CenterArea
		this.centerPanel = this.buildCenterPanel();

		// build StartArea
		this.headerPanel = this.buildHeaderPanel();

		// build RightArea
		this.statusPanel = this.buildStatusPanel();

		// build FooterArea
		this.footerPanel = this.buildFooterPanel();

		// build LeftArea
		this.optionPanel = this.buildOptionPanel();

		// bring ContentArea together
		this.panelCenter.add(this.centerPanel);
		this.panelStart.add(this.headerPanel);
		this.panelLeft.add(this.optionPanel);
		this.panelRight.add(this.statusPanel);
		this.panelBottom.add(this.footerPanel);


		// relate the frame to the borderLayout
		frame.add( this.panelStart, BorderLayout.PAGE_START );
		frame.add( this.panelLeft, BorderLayout.LINE_START );
		frame.add( this.panelCenter );
		frame.add( this.panelRight, BorderLayout.LINE_END );
		frame.add( this.panelBottom, BorderLayout.PAGE_END );

		frame.pack(); // get PreferredSize to start rendering
		frame.setVisible( true );
	}
	
	/** erstelle und gebe das CenterPanel aus */ 
	public JPanel buildCenterPanel()
	{
		this.centerPanel = new JPanel();

		JPanel welcomeTextPanel = new JPanel();

		// Use a JTextArea (FlowLayoutManager by default)
		String welcomeText = new String(
				"             *** Überblick JobaApps ***             \n" +
				"   Hier kannst du diverse interssante Sachen machen:\n" +
				"   * Unter Anwendungen findest du alle Programme.\n" +
				"   * Die anderen Menüs sind allgemeiner Natur.\n" +
				"   * Links im Panel ist eine Info zum Anwendungsablauf.\n" +
				"   * Rechts im Panel ist eine Statusübersicht.\n");
		JTextArea welcomeTextArea = new JTextArea(welcomeText);
		Dimension dimwta = new Dimension(500, 300);
		welcomeTextArea.setSize(dimwta);
		welcomeTextArea.setFont(new Font("Nimbus Mono L", Font.PLAIN, 14 ));
		welcomeTextArea.setLineWrap(true);
		welcomeTextArea.setWrapStyleWord(true);
		welcomeTextArea.setEditable(false);
		
		welcomeTextPanel.add(welcomeTextArea);
		
		Dimension dim = new Dimension( 600, 600 );
		this.centerPanel.setPreferredSize(dim);
		this.centerPanel.setBackground(Color.white);
		this.centerPanel.add(welcomeTextPanel);

		return this.centerPanel;
	}

	/** HeaderPanel erstellen und ausgeben */
	public JPanel buildHeaderPanel()
	{
		this.headerPanel = new JPanel();
		String hps = new String("JobaApps");
		JTextArea headerPanelTextArea = new JTextArea(hps);
		headerPanelTextArea.setFont(new Font( "Nimbus Mono L", Font.BOLD, 26));
		headerPanelTextArea.setEditable(false);
		this.headerPanel.add(headerPanelTextArea);
		return this.headerPanel;
	}

	/** StatusPanel erstellen und ausgeben */
	public JPanel buildStatusPanel()
	{
		this.statusPanel = new JPanel();
		this.statusPanel.setBorder(BorderFactory.createLineBorder(Color.white));
		
		// replace statusPanel-Content
		JTextArea jta = new JTextArea();
		jta.setBorder(null);
		jta.setEditable(false);
		jta.setLineWrap(true);
		jta.setWrapStyleWord(true);
		Dimension dim = new Dimension(150, 590);
		jta.setPreferredSize(dim);
		jta.setText(
				"Status:\n" +
				"Ort - Startbildschirm"
				);
		
		this.statusPanel.add(jta);

		//Dimension dim = new Dimension( 200, 600 );
		//this.statusPanel.setPreferredSize(dim);
		return this.statusPanel;
	}

	/** footer-Panel erstellen und ausgeben */
	public JPanel buildFooterPanel()
	{
		this.footerPanel = new JPanel();
		JLabel label = new JLabel("Bei Problemen und Fragen: [email]info@jochen-bauer.net[/email]");
		this.footerPanel.add(label);

		return this.footerPanel;
	}

	/** OptionPanel erstellen und ausgeben */
	public JPanel buildOptionPanel()
	{
		this.optionPanel = new JPanel();
		this.optionPanel.setBorder(BorderFactory.createLineBorder(Color.white));
		
		JTextArea jta = new JTextArea();
		jta.setBorder(null);
		jta.setEditable(false);
		jta.setLineWrap(true);
		jta.setWrapStyleWord(true);
		Dimension dim = new Dimension(150, 590);
		jta.setPreferredSize(dim);
		jta.setText(
				"Bedienung: \n" +
				"* Keine weiteren Infos."
				);
		
		this.optionPanel.add(jta);

		//Dimension dim = new Dimension(200, 600);
		//this.optionPanel.setPreferredSize(dim);
		return this.optionPanel;
	}

	/** 
	 * ActionHandler
	 * 
	 * Die Actions werden nach dem Alphabet geordnet und zwar 
	 * nach dem Menueintrag, darunter folgt die Antwortansicht
	 * und dann der nächste Eintrag. Am Anfang und am Ende sind 
	 * zwei Dummy-Einträge - alles andere im 'else if'-Teil.
	 */
	public void actionPerformed(ActionEvent e)
	{

		if ( e.getActionCommand() == "LAF-Wechsel" )
		{
			// TODO
		}
		else if ( e.getActionCommand() == "Dotplot")
		{
			...

		}
		else if ( e.getActionCommand() == "Convex-Hull")
		{
			// replace statusPanel-Content
			JTextArea jta = new JTextArea();
			jta.setBorder(null);
			jta.setEditable(false);
			jta.setLineWrap(true);
			jta.setWrapStyleWord(true);
			Dimension dim = new Dimension(150, 590);
			jta.setPreferredSize(dim);
			jta.setText(
					"Status:\n" +
					"Ort - Geometrie | Convex-Hull"
					);
			
			this.statusPanel.removeAll();
			this.statusPanel.add(jta);
			this.statusPanel.revalidate();
			this.statusPanel.repaint();
			
			// replace centerPanel Content
			this.centerPanel.removeAll();
			JPanel convexHullPanel = new JPanel();
			JLabel convexHullHeaderLabel = new JLabel( "Convex-Hull berechnen" );
			JTextField convexHullInputField = new JTextField( "hier Punkte eintragen etwa 23,17;66,77;");
			
			// die JTextFields ein die Transfercontainer uebergeben
			this.dollarPostStringOne = convexHullInputField;
			
			JButton convexHullButton = new JButton("Convex-Hull berechnen");
			convexHullButton.addActionListener( this );
			
			convexHullPanel.add( convexHullHeaderLabel );
			convexHullPanel.add( convexHullInputField );
			convexHullPanel.add( convexHullButton);
			
			this.centerPanel.add( convexHullPanel );
			this.centerPanel.revalidate();
			this.centerPanel.repaint();
			
		}
		else if ( e.getActionCommand() == "Convex-Hull berechnen")
		{
			// replace centerPanel Content
			this.centerPanel.removeAll();
			
			// Kopf 
			JPanel convexHullPanel = new JPanel();
			
			// Punkte in den Konstruktor einspeisen
			
			// Array uebergeben - lafft
			// TODO Array waere besser wenn es übernommen wird
			int[][] points = { 
					{ 200, 200 },
					{ 160, 320 },
					{ 245,  40 },
					{  80, 220 },
					{  40, 180 },
					{ 260, 175 },
					{ 180,  50 },
					{ 100, 160 }
			};
			
			// Objekt anlegen
			JobaConvexHull jobaConvexHullObject = new JobaConvexHull(points); // Konstruktor startet dazu computeConvexHull()
			
			// Punkt anfuegen
			
			// Punkt verschieben
			
			// Punkt loeschen
			
			// Debugging-Anweisungen
			
			// DebugFrame anzeigen, der JInternalFrame samt Inhalt kommt aus JobaConvexHull,
			// JInternalFrames brauchen aber gewissen Umstände, etwa einen JFrame als Elternteil und
			// ein JDesktopPane als Träger der JInternalFrames. Selbst wird das JDesktopPane am main-Frame
			// eingehängt.
			
			// Ausgangspunkte ausgeben
			int[][] returnInputPunkteArray = jobaConvexHullObject.getPoints();
			String debuggingStringFromJobaGuiToJobaConvexHull = new String("");
			
			debuggingStringFromJobaGuiToJobaConvexHull += " +++++ Debugging String aus JobaGui +++++";
			debuggingStringFromJobaGuiToJobaConvexHull += "\n Liste der Eingabepunkte: \n";
			
			for ( int i = 0; i < returnInputPunkteArray.length; i++ ) // Laenge des Punktearray, also P1 bis Pn
			{
				debuggingStringFromJobaGuiToJobaConvexHull += "P" + (i+1) + " ( ";
				for ( int j = 0; j < returnInputPunkteArray[i].length; j++ ) // Punktekoordinaten, einmal auf 0 der X-Wert, auf 1 der Y-Wert
				{
					debuggingStringFromJobaGuiToJobaConvexHull += returnInputPunkteArray[i][j] + " ; "; 
				}
				debuggingStringFromJobaGuiToJobaConvexHull += " )\n";
			}
			
			// Punktearray anzeigen
			int[][] convexHullPoints = jobaConvexHullObject.getConvexHullPoints();  
			
			String debuggingStringFromJobaConvexHullToJobaGui = new String("");
			debuggingStringFromJobaConvexHullToJobaGui += " +++++ Debugging String aus JobaConvexHull +++++";
			
			for ( int i = 0; i < convexHullPoints.length; i++ ) // Laenge des Punktearray, also P1 bis Pn
			{
				debuggingStringFromJobaConvexHullToJobaGui += "P" + (i+1) + " ( ";
				for ( int j = 0; j < convexHullPoints[i].length; j++ ) // Punktekoordinaten, einmal auf 0 der X-Wert, auf 1 der Y-Wert
				{
					debuggingStringFromJobaConvexHullToJobaGui += convexHullPoints[i][j] + " ; "; 
				}
				debuggingStringFromJobaConvexHullToJobaGui += " )\n";
			}
			
			String debugString = new String();
			debugString = jobaConvexHullObject.getDebugString();
			
			Container container = frame.getContentPane();
			JDesktopPane desktop = new JDesktopPane();
			container.add( desktop );
			
			JInternalFrame debugFrame = new JInternalFrame( 
					"Debug-InternalFrame-Convex-Hull",  // title 
					true, // resizeable 
					true, // closeable 
					true, // maximizeable
					true // iconifiable, minimierbar
					);
			debugFrame.setSize(600, 200);
			
			Font debugFrameFont = new Font("Nimbus Mono L", Font.PLAIN, 12 );
			
			JTextArea debugFrameTextArea = new JTextArea();
			JScrollPane debugFrameScrollPane = new JScrollPane( debugFrameTextArea ); // ScrollPane die TextArea geben
			
			debugFrameTextArea.setFont(debugFrameFont);
			debugFrameTextArea.setEditable(false);
			debugFrameTextArea.setText(debugString + debuggingStringFromJobaGuiToJobaConvexHull + debuggingStringFromJobaConvexHullToJobaGui);
			
			debugFrame.add(debugFrameScrollPane); // ScrollPane einhängen bei JIF
			debugFrame.setVisible(true);	
			
			
			desktop.add( debugFrame );
			
			this.centerPanel.add( convexHullPanel );
			this.centerPanel.revalidate();
			this.centerPanel.repaint();
			
		}
		else if ( e.getActionCommand() == "Dokumentation")
		{

			...
		}
		else if ( e.getActionCommand() == "Fibonacci-Folge" )
		{
			this.centerPanel.removeAll();
			// replace statusPanel-Content
			JTextArea jta = new JTextArea();
			jta.setBorder(null);
			jta.setEditable(false);
			jta.setLineWrap(true);
			jta.setWrapStyleWord(true);
			Dimension dim = new Dimension(150, 590);
			jta.setPreferredSize(dim);
			jta.setText(
					"Status: Ort - Mathematik | Fibonacci-Folge"
					);
			
			this.statusPanel.removeAll();
			this.statusPanel.add(jta);
			this.statusPanel.revalidate();
			this.statusPanel.repaint();
			
			JTextField fibonacciInputString = new JTextField( "10");
			this.dollarPostStringOne = fibonacciInputString;
			
			JButton fibonacciButton = new JButton("Fibonacci-Folge berechnen");
			fibonacciButton.addActionListener(this);
			
			this.centerPanel.add(fibonacciInputString);
			this.centerPanel.add(fibonacciButton);
			this.centerPanel.revalidate();
			this.centerPanel.repaint();
		}
		else if ( e.getActionCommand() == "Fibonacci-Folge berechnen" )
		{
			this.centerPanel.removeAll();
			
			// TODO es gibt bei der Eingabe 48 eine Absturz, wahrscheinlich ein Überlauf?!
			
			// String als int parsen und Konstruktor aufrufen
			int n = Integer.parseInt(this.dollarPostStringOne.getText());
			JobaFibonacci jobaFibonacci = new JobaFibonacci(n);
			JLabel jlf = new JLabel(""+jobaFibonacci.getFib());
			
			this.centerPanel.add(jlf);
			
			this.centerPanel.revalidate();
			this.centerPanel.repaint();
		}
		else
		{
			// Dialogue if an actionListener is registrated but doesn't work

		}
	}
	
	
	/** MouseActionHandler */ 
	public void mouseClicked(MouseEvent me)
	{
		if ( me.getButton() == MouseEvent.BUTTON1 )
		{
			JOptionPane.showMessageDialog(null, "BUTTON 1 wurde geklickt.");
		}
		else 
		{
			JOptionPane.showMessageDialog(null, "Oha so war das mit dem Mausklick nicht gemeint.");
		}
	}
	public void mouseEntered(MouseEvent me){}
	public void mouseExited(MouseEvent me){}
	public void mousePressed(MouseEvent me){}
	public void mouseReleased(MouseEvent me){}

	/** main-Methode zum Programmeinstieg */
	public static void main ( String[] args )
	{
		new JobaGui();
	}

}

Es kann natürlich sein, dass man noch die Zweige auskommentieren muss, die nicht gebraucht werden, weil sie auf Objekte bauen, die nicht da sind, da die Klassen fehlen. Es geht um die Zeilen rund um 780, der Zweig e.getActionCommand == 'Convex-Hull berechnen'. Sorry, dass ich da kaum vorarbeiten kann, um ein leichter zu kompilierendes Beispiel zu schaffen, ich denke aber, dass man so ggf. als Fachmann am besten sieht, was da passiert. In der Anwendung muss dann im Menü "Anwendungen" | "Geometrie" | "ConvexHull" geklickt werden, dann kommt das JInternalFrame mit dem DebugString, das ist ein einfacher String der da drin sein soll.

BTW: ist auch meine erste Gui, daher wird es da schon noch Optimierungsbedarf geben.
 

Jay1980

Bekanntes Mitglied
Danke Andre - vergesst es einfach - wegen deiner Anmerkungen mit der LayeredPane habe ich nun alles nochmal durchgelesen und wenn ich nun den JInternalFrame auf die LayeredPane lege, klappt das wie gewünscht. Wie so oft, muss man das alles erst genau verstehen, bevor man es nutzen kann - sonst hagelt es oft Überraschendes.

Die beiden Artikel gaben letztendlich den Ausschlag dazu, warum es klappte und dass mir die Zusammenhänge nun etwas klarer sind:
How to Use Layered Panes (The Java™ Tutorials > Creating a GUI with JFC/Swing > Using Swing Components)
How to Use Root Panes (The Java™ Tutorials > Creating a GUI with JFC/Swing > Using Swing Components)

Sodala, auf zur nächsten Hürde ...
 
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
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
DeeDee0815 JInternalFrame in JScrollpane AWT, Swing, JavaFX & SWT 4
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