JFrame + JTextField

manuk

Grünschnabel
Hallo.

Ich hätte eine Frage zu Swing.

Ich hab eine Klasse MyWindow und diese ist von JFrame abgeleitet.

Ich habe es erfolgreich geschafft dieses JFrame ein Menü zuzuteilen. Nur ich würde gerne, wenn im Menü eine Funktion augerufen wird, ein JTextField erzeugen, in dem ich Übergabeparameter eingeben kann.

Danke für alles

//EDIT: Auf meinen JFrame liegt ein JPanel. Also ich würde gerne dieses Textfeld auf der Seite neben dem Fenster haben.

Manu.
 
Zuletzt bearbeitet:
Das is recht einfach
du musst das JTextfield am Anfang initialisieren also erstellen und hinzufügen
dann aber auf setVisible(false); setzen

und dann im ActionListener auf setVisible(true) setzen!!

mfg Bodo
 
Was hast du für Code bisher? wo ist das Problem? Fliegen irgendwo Exceptions? Tut etwas nicht so, wie es sein sollte?

Gruß
Ollie
 
Hallo.

Danke für die schnelle Antwort. Ich hätte eigentlich auch gedacht, dass es einfach sein sollte. Aber leider klappt es nicht. Er zeigt mir nie mein Textfeld an. Muss gestehen, dies sind auch meine ersten Java-Gui Erfahrungen.

Code:
public class MyWindow extends JFrame{
    
    /** Creates a new instance of MyWindow */
    
     private ImageView iv;
      
    public MyWindow() {
        JMenuBar menubar = new JMenuBar();
        JMenu dMenu = new JMenu();
        JMenuItem openItem = new JMenuItem();
       
        JTextField text = new JTextField();
        
        JScrollPane  scrollView;
      
            setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        
        iv = new ImageView();
        scrollView = new JScrollPane(iv);
        scrollView.setBorder(BorderFactory.createEmptyBorder());
        
        setContentPane(scrollView);
        getContentPane().setMinimumSize(new Dimension(320, 200));
        getContentPane().setPreferredSize(new Dimension(512, 384));
        //textf.setText("Hallo");
    //    setContentPane(text);
        text.setVisible(true);
        this.add(text);
        
        openItem.setText("Open");
        openItem.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                newOpenAction(evt);
            }
        });
       
   
        dMenu.setText("File");
        dMenu.add(openItem);
       
        
        menubar.add(dMenu);
        setJMenuBar(menubar);
        pack();
    }

Normal sollte er das Textfeld anzeigen, nur wenn eine bestimmte Funktion im Menü ausgewählt wurde. Hab jetzt mal versucht generell eines anzuzeigen.

ImageView ist vom Typ JPanel.

Danke für alles

Manu
 
Moin!
Die Methode newOpenAction() ist wohl für die Erstellung des Textfeldes zuständig, oder?
Dann wäre es doch geschickt, diese ebenfalls zu posten, oder?

*grüssle*
MeinerEiner
 
Hallo.

Und was müsste ich expliziet in newOpenAction noch hinzufügen? Hab jetzt bei dem letzten Post den Code so umgeschrieben, das meiner Meinung nach, das Textfeld gleich am Anfang also mit der Erzeugung des JFrames angezeigt wird.


Danke für alles


Manu.
 
Hallo.

Danke für deine Antwort. Hast du es so gemeint?
text.setVisible(true);
getContentPane().add(text);

Weil leider funktioniert dies so nicht.

Danke für alles

Manu

//EDIT: Wenn ich es so mache, liegt es direkt am Panel. Ich würde gerne ein unabhängiges Textfeld haben, geht das auch?

text.setVisible(true);
getContentPane().add(text);
text.setBounds(10, 10, 80, 20);
 
Zuletzt bearbeitet:
Also ehrlich gesagt wundert mich dass du deinen Code compilieren kannst wenn du this.add(test) ausführst!
Was für eine Entwicklungsumbegung verwendest du

Code:
this.getContentPane().setLayout(null)
text.setBounds(8, 8, 200, 24);
this.getContentPane().add(text)
 
Also ehrlich gesagt wundert mich dass du deinen Code compilieren kannst wenn du this.add(test) ausführst!

Warum sollte das nicht funktionieren?
Ich würde auch nicht den Layout-Manager auf null setzen, da sonst die Scrollpane sich nicht ans Fenster anpasst.



@manuk
Wenn du das Fenster der ContentPane addest, wirst du es nicht sehen, da du deine ContentPane auf die Scrollpane änderst. Wenn du was in der Scrollpane sehen willst, musst du es dem Viewport der Scrollpane adden.
Da ein Layout-Manager genutzt wird, kannst du nicht setBounds machen, sondern musst die PreferredSize setzen.

MFG

zEriX
 
Zurück