JInternalFrame - Handhabung?

MädMäx

Mitglied
Hallo zusammen,

ich möchte mir ein Programm mit fester Menüleiste basteln (d.h. Menüleiste immer am oberen Ende sichtbar). Leider bin ich nicht mit Javakünsten gesegnet und bin auch technisch nicht allzu fähig, die Java-/Swingdokumentation wirklich zu verstehen.

Folgendes Problem: Ich hab testweise einfach bissl rumgespielt und stoße auf das Problem, dass ich dem JInternalFrame keinen Button zuweisen kann. Nachfolgend der Code, bitte um Hilfe.

Java:
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;

public class MailGUI implements ActionListener {

     JFrame applikation;
     Container container;

     // Menüleiste
     JMenuBar menueLeiste;

     // Menüleiste Elemente
     JMenu datei;
     JMenu hilfe;

     // Datei
     JMenuItem oeffnen;
     JMenuItem beenden;

     // Hilfe
     JMenuItem faq;
     JMenuItem about;

     // Textfeld
     JTextArea textarea;
     
     // Mainframe
     JScrollPane mainframe;
     
     // Interner Frame
     JInternalFrame iFrame1;

     //Button
    JButton button;
    
     public MailGUI() {
          applikation = new JFrame("JMenuBar Beispiel");
          container = applikation.getContentPane();

          // Menüleiste erzeugen
          menueLeiste = new JMenuBar();

          // Menüelemente erzeugen
          datei = new JMenu("Datei");
          hilfe = new JMenu("Hilfe");

          // Untermenüelemente erzeugen
          oeffnen = new JMenuItem("öffnen");
          oeffnen.addActionListener(this);
          beenden = new JMenuItem("beenden");
          beenden.addActionListener(this);
          faq = new JMenuItem("F.A.Q.");
          faq.addActionListener(this);
          about = new JMenuItem("Über");
          about.addActionListener(this);

          // Menüelemente hinzufügen
          menueLeiste.add(datei);
          menueLeiste.add(hilfe);

          // Untermenüelemente hinzufügen
          datei.add(oeffnen);
          datei.add(beenden);
          hilfe.add(faq);
          hilfe.add(about);

          // Textfeld erzeugen
          textarea = new JTextArea();
          mainframe = new JScrollPane();
          iFrame1 = new JInternalFrame();
          
          applikation.add(menueLeiste, BorderLayout.NORTH);
          applikation.add(mainframe.add(textarea), BorderLayout.CENTER);
          mainframe.add(iFrame1);
          iFrame1.setVisible(false);

          applikation.setSize(400, 300);
          applikation.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
          applikation.setVisible(true);
          
          button = new JButton("Button1");
          button.setSize(100, 100);
          button.setLocation(100, 100);
          iFrame1.add(button);
          
     }

     public void actionPerformed(ActionEvent object) {
          if (object.getSource() == oeffnen){
        	  textarea.append("\n" + "öffnen wurde angeklickt");
        	  iFrame1.setVisible(false);
        	  textarea.setVisible(true);
          }
          if (object.getSource() == beenden){
        	  textarea.append("\n" + "beenden wurde angeklickt");
        	  textarea.setVisible(false);
        	  iFrame1.setVisible(true);
          }
          if (object.getSource() == faq){
        	  textarea.append("\n" + "faq wurde angeklickt");
          }
          if (object.getSource() == about){
        	  textarea.append("\n" + "über wurde angeklickt");
          }
     }

     public static void main(String[] args) {
          MailGUI gui = new MailGUI();
     }
}

Danke im Voraus und viele Grüße,
MädMäx
 
S

SlaterB

Gast
ist das Verständnis so schlecht, dass du nichtmal bei
How to Use Internal Frames (The Java™ Tutorials > Creating a GUI With JFC/Swing > Using Swing Components)
vorbeigekommen bist und sowas elementares wie ein nötiges JDesktopPane überlesen hast?

auf Zeilen wie
> applikation.add(mainframe.add(textarea), BorderLayout.CENTER);
solltest du tunlichst verzichten,
ein JScrollPane mainframe zu benennen hat auch nicht gerade geholfen,

hier grob eine Version, die etwas anzeigt, die textArea habe ich weitgehend herausgestrichen, funkte auch überall dazwischen:
Java:
public class Test
{
    public static void main(String[] args)
    {
        MailGUI gui = new MailGUI();
    }
}

class MailGUI
    implements ActionListener
{

    JFrame applikation;
    Container container;

    // Menüleiste
    JMenuBar menueLeiste;

    // Menüleiste Elemente
    JMenu datei;
    JMenu hilfe;

    // Datei
    JMenuItem oeffnen;
    JMenuItem beenden;

    // Hilfe
    JMenuItem faq;
    JMenuItem about;

    // Textfeld
    JTextArea textarea;

    // Mainframe
    JScrollPane scrollPane;

    // Interner Frame
    JInternalFrame iFrame1;

    // Button
    JButton button;

    public MailGUI()
    {
        applikation = new JFrame("JMenuBar Beispiel");
        container = applikation.getContentPane();

        // Menüleiste erzeugen
        menueLeiste = new JMenuBar();

        // Menüelemente erzeugen
        datei = new JMenu("Datei");
        hilfe = new JMenu("Hilfe");

        // Untermenüelemente erzeugen
        oeffnen = new JMenuItem("öffnen");
        oeffnen.addActionListener(this);
        beenden = new JMenuItem("beenden");
        beenden.addActionListener(this);
        faq = new JMenuItem("F.A.Q.");
        faq.addActionListener(this);
        about = new JMenuItem("Über");
        about.addActionListener(this);

        // Menüelemente hinzufügen
        menueLeiste.add(datei);
        menueLeiste.add(hilfe);

        // Untermenüelemente hinzufügen
        datei.add(oeffnen);
        datei.add(beenden);
        hilfe.add(faq);
        hilfe.add(about);

        // Textfeld erzeugen
        textarea = new JTextArea();

        JDesktopPane desktop = new JDesktopPane();
        scrollPane = new JScrollPane(desktop);

        applikation.add(menueLeiste, BorderLayout.NORTH);
        applikation.add(scrollPane, BorderLayout.CENTER);

        applikation.setSize(400, 300);
        applikation.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        button = new JButton("Button1");
        button.setSize(100, 100);
        button.setLocation(100, 100);

        iFrame1 = new JInternalFrame();
        iFrame1.setSize(200, 200);
        iFrame1.add(button);
        iFrame1.setVisible(true);
        
        desktop.add(iFrame1);
        applikation.setVisible(true);
    }

    public void actionPerformed(ActionEvent object)
    {
        if (object.getSource() == oeffnen)
        {
            textarea.append("\n" + "öffnen wurde angeklickt");
            iFrame1.setVisible(false);
            textarea.setVisible(true);
        }
        if (object.getSource() == beenden)
        {
            textarea.append("\n" + "beenden wurde angeklickt");
            textarea.setVisible(false);
            iFrame1.setVisible(true);
        }
        if (object.getSource() == faq)
        {
            textarea.append("\n" + "faq wurde angeklickt");
        }
        if (object.getSource() == about)
        {
            textarea.append("\n" + "über wurde angeklickt");
        }
    }
}
 

MädMäx

Mitglied
Danke für die Hilfe. Was mir noch etwas unpassend ist, ist die Titelleiste des InternalFrames. (Ich will ja in Abhängigkeit von den geklickten MenuItems Forms bzw. Anzeigen unter der MenuBar anzeigen.) Gibt es dafür einen Workaround oder was würdet ihr vorschlagen? Ist der InternalFrame die falsche Lösung?

Noch etwas:

To add components to an internal frame, you add them to the internal frame's content pane.

D.h. wenn ich eine Anzeige (in meiner Form, mal ganz untechnisch ausgedrückt) ausblenden will, muss ich alle einzelen Komponenten der Form - die ich ja schlussendlich nicht binden kann - auch ausblenden? Oder wie kann ich weiter vorgehen?

Sorry, für meine Anfängerfehler und geistigen Hänger.

Grüße und vielen Dank im Voraus,
MädMäx
 
S

SlaterB

Gast
ich persönlich kann zur Titelleiste des InternalFrames wenig sagen,
deine MenuItems scheinen damit aber wenig zu tun zu haben, die Öffnen/ Schließen oder schreiben in die TextArea?
ich seh schon, ist wohl nicht so gut dass ich die TextArea rausgenommen habe, irgendwo muss die auch wieder rein

die zweite Häfte verstehe ich auch untechnisch kaum, was ist eine Anzeige?
in jedem Fall sollte es z.B. reichen, nur das JInternalFrame auszublenden, dann sind auch enthaltene Buttons usw. weg
 

MädMäx

Mitglied
So, nochmal:

Ich hab meine Menüleiste, mit der Ich den darunterstehenden (= die ganze Form unter der Menüleiste) Bereich abhängig von den geklickten MenuItems, Inhalte anzeigen will. Sprich, wenn FAQ angeklickt wird, soll eben eine Textkomponente angezeigt werden, wenn Hilfe angeklickt wird, kommen meinetwegen zweie Textkomponenten, wo ich meinetwegen eine Eingabe und einen Button (für den Search-Befehl bspw.) habe. Mir wäre recht, wenn ich eben unterhalb der MenüBar einfach komplette Bausteine auswechseln könnte, mit zugehörigen Komponenten zugleich.

Zum zweiten Teil:

der kursive Text besagt doch aus, dass ich die Komponenten auf die JDesktopPane legen soll, oder? Oder was ist mit Content Pane gemeint?
 
Zuletzt bearbeitet:
S

SlaterB

Gast
in dem Text gehts um den Inhalt des JInternalFrames, ähnlich dem Inhalt eines JFrames,
beschreibt quasi Zeile 93 aus meinem Programm, eine Verkürzung zum ContentPane,

letzlich funktioniert fast überall erstmal ein einfaches add(), außer bei Layouts
und JScrollPane findet das auch nicht gut (ein weiterer Fehler in deinem ersten Post),
dort die Komponente im Konstruktor übergeben oder per setViewportView()

----

zu deinen Darstellungswünschen:
kennst du die Varianten mit CardLayout oder JTabbedPane?
die kümmern sich um sowas, selber ist das recht kompliziert

schaue hier
How to Use CardLayout (The Java™ Tutorials > Creating a GUI With JFC/Swing > Laying Out Components Within a Container)
sogar direkt mit einem Beispiel für Wechsel zwischen Buttons und Text

oder suche bei google nach einem der Stichwörter zusammen mit 'java', dann findest du bestimmt auch deutsche Seiten
 
Ä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
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
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