Frame über Button öffnen

Blacksun91

Mitglied
Hi,

ich stehe gerade vor dem Problem ein Frame mit Objekten aus einer anderen -java-Datei per Buttonklick zu öffnen.
Mir ist es bisher nur gelungen einen Frame Dynamisch zu erzeugen, nicht aber einen bestehenden Frame zu laden.

Der genutzte Code zum dynamischen erstellen des Frames ist folgender:

Java:
 public void jButton1_ActionPerformed(ActionEvent evt) {
    Container cp = getContentPane();
    cp.setLayout(null);
    JFrame f = new JFrame(profiledit);
    f.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
    f.setSize( 600, 400 );
    f.setVisible( true );
    cp.add(f);

  }

Nun wird hier aber nur ein leerer Frame ohne jegliche Objekte erstellt.

Gruß
 

Michael...

Top Contributor
Auf dem Frame ist ja auch nichts drauf.

Wenn eine bereits vorhandener Frame angezeigt werden sollt, dann muss:
1. dieser bereits existieren ;-)
2. eine Referenz auf den Frame auch in der Methode verfügbar sein

Überlicherweise arbeitet man mit einem JFrame und mehreren JDialog(s) wenn ein zusätzliches Fenster angezeigt werden soll.
 

Blacksun91

Mitglied
Ich habe bereits einen kompletten Frame für meine Optionseigenschaften erstellt, den ich per Buttonklick anzeigen will. Gibt es keine Möglichkeiten diesen Frame einzubinden oder muss ich einen komplett neuen Jdialog machen? =(
 

AmunRa

Gesperrter Benutzer
Je nach dem wie du den Frame erstellt hast gibts da unter scheidlich möglichkeiten.


Wenn du die klasse von Frame erben hast lassen dan gehts einfach mit

Java:
 public void jButton1_ActionPerformed(ActionEvent evt) {
    Klasse f = new Klasse(profiledit);
    f.setSize( 600, 400 );
    f.setVisible( true );
  }

wenn der Frame nur als Instanzvariable in einer Klasse ist musst du halt eine entsprechende Gettermethode oder so verwenden.

Wie hast du den den Frame erstellt?
 

Blacksun91

Mitglied
Oh Gott, kann ich grad nicht sagen, weil ich erst anfange und noch nicht ganz viel Ahnung habe.

Hier ist das Frame was ich einbinden möchte:
Java:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import java.io.*;
import javax.swing.filechooser.FileSystemView;

/**
  *
  * Beschreibung
  *
  * @version 1.0 vom 19.03.2011
  * @author
  */

public class profiledit extends JFrame{
  // Anfang Attribute
  private JButton exepfad = new JButton();
  private JTextField pfadtextfield = new JTextField();
  private JFileChooser pfad = new JFileChooser("C:/");
  private JTextField nametextfield = new JTextField();
  private JLabel pfadheadline = new JLabel();
  private JLabel nameheadline = new JLabel();

  private JLabel iconheadline = new JLabel();
    private String[] profilcomboData = {};
  private JComboBox profilcombo = new JComboBox(profilcomboData);
  private JLabel profilheadline = new JLabel();
  private JButton profiladd = new JButton();
  private JButton addprog = new JButton();
  private JTextField profiltextfield = new JTextField();
  private JLabel newprofilheadline = new JLabel();
  private JLabel iconbild = new JLabel();

  private JButton loeschen = new JButton();
  private JButton profildelete = new JButton();
  // Ende Attribute

  public profiledit(String title) {
    // Frame-Initialisierung
    super(title);
    setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
    int frameWidth = 620;
    int frameHeight = 307;
    setSize(frameWidth, frameHeight);
    Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
    int x = (d.width - getSize().width) / 2;
    int y = (d.height - getSize().height) / 2;
    setLocation(x, y);
    Container cp = getContentPane();
    cp.setLayout(null);
    // Anfang Komponenten

    exepfad.setBounds(264, 176, 35, 25);
    exepfad.setText("...");
    exepfad.setMargin(new Insets(2, 2, 2, 2));
    exepfad.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        exepfad_ActionPerformed(evt);
      }
    });
    cp.add(exepfad);
    pfadtextfield.setBounds(8, 176, 249, 24);
    pfadtextfield.setText("");
    cp.add(pfadtextfield);
    nametextfield.setBounds(8, 120, 185, 24);
    nametextfield.setText("");
    cp.add(nametextfield);
    pfadheadline.setBounds(8, 152, 53, 16);
    pfadheadline.setText("Pfad : ");
    pfadheadline.setFont(new Font("MS Sans Serif", Font.BOLD, 13));
    cp.add(pfadheadline);
    nameheadline.setBounds(8, 96, 163, 16);
    nameheadline.setText("Name des Programms :");
    nameheadline.setFont(new Font("MS Sans Serif", Font.BOLD, 13));
    cp.add(nameheadline);

    iconheadline.setBounds(216, 96, 43, 16);
    iconheadline.setText("Icon :");
    iconheadline.setFont(new Font("MS Sans Serif", Font.BOLD, 13));
    cp.add(iconheadline);
    profilcombo.setBounds(8, 40, 145, 24);
    profilcombo.addFocusListener(new FocusAdapter() {
      public void focusGained(FocusEvent evt) {
        profilcombo_FocusGained(evt);
      }
    });
    cp.add(profilcombo);
    profilheadline.setBounds(8, 16, 122, 16);
    profilheadline.setText("Profil auswählen :");
    profilheadline.setFont(new Font("MS Sans Serif", Font.BOLD, 13));
    cp.add(profilheadline);
    profiladd.setBounds(488, 40, 49, 25);
    profiladd.setText("add");
    profiladd.setMargin(new Insets(2, 2, 2, 2));
    profiladd.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        profiladd_ActionPerformed(evt);
      }
    });
    cp.add(profiladd);
    addprog.setBounds(320, 176, 81, 25);
    addprog.setText("Hinzufügen");
    addprog.setMargin(new Insets(2, 2, 2, 2));
    addprog.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        addprog_ActionPerformed(evt);
      }
    });
    cp.add(addprog);
    profiltextfield.setBounds(312, 40, 161, 24);
    profiltextfield.setText("");
    cp.add(profiltextfield);
    newprofilheadline.setBounds(312, 16, 158, 16);
    newprofilheadline.setText("Neues Profil erstellen :");
    newprofilheadline.setFont(new Font("MS Sans Serif", Font.BOLD, 13));
    cp.add(newprofilheadline);
    loeschen.setBounds(320, 128, 83, 25);
    loeschen.setText("Löschen");
    loeschen.setMargin(new Insets(2, 2, 2, 2));
    loeschen.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        loeschen_ActionPerformed(evt);
      }
    });
    cp.add(loeschen);
    profildelete.setBounds(168, 40, 89, 25);
    profildelete.setText("Profil löschen");
    profildelete.setMargin(new Insets(2, 2, 2, 2));
    profildelete.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        profildelete_ActionPerformed(evt);
      }
    });
    cp.add(profildelete);
    // Ende Komponenten
    iconbild.setBounds(222, 115, 30,30);
    add(iconbild);
  
    setResizable(false);
    setVisible(true);
  }

  // Anfang Methoden
  public void exepfad_ActionPerformed(ActionEvent evt) {
  String pfadstring = pfadOpenFilename();

  iconbild.setIcon( null );
  FileSystemView fsv = FileSystemView.getFileSystemView();
  File f = new File(pfadstring);
  iconbild.setIcon(fsv.getSystemIcon(f));
  pfadtextfield.setText(pfadstring);



  }

  public String pfadOpenFilename() {
    pfad.setDialogTitle("Pfad auswählen");
    if (pfad.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) {

      return pfad.getSelectedFile().getPath();
    } else {
      return null;
    }

  }





    public void profiladd_ActionPerformed(ActionEvent evt) {

            try{
                File neuprofil = new File(profiltextfield.getText() + ".txt");


               if ( neuprofil.exists()){
               fileexistsShowMessageDialog();

              }else if(profiltextfield.getText().length() < 5){

              profilnameleerShowMessageDialog();

              }else{
              neuprofil.createNewFile();
              profiltextfield.setText("");
              successShowMessageDialog();
              }




              }catch(IOException ioe){

                }

     }

  public void addprog_ActionPerformed(ActionEvent evt) {
    // TODO hier Quelltext einfügen
  }

  public void fileexistsShowMessageDialog() {
    JOptionPane.showMessageDialog(this, "Es existiert bereits ein Profil mit diesem Namen! Bitte wählen Sie einen anderen Namen aus.", "Fehler beim Erstellen", JOptionPane.ERROR_MESSAGE);
  }

  public void successShowMessageDialog() {
    JOptionPane.showMessageDialog(this, "Das Profil wurde erstellt.", "", JOptionPane.INFORMATION_MESSAGE);
  }






  public void profilcombo_FocusGained(FocusEvent evt) {
   profilcombo.removeAllItems();

  File dir = new File(System.getProperty("user.dir"));
  File[] files = dir.listFiles();
  if (files != null) {
    for (int i = 0; i < files.length; i++) {
    boolean filter = files[i].getName().endsWith(".txt");
    if (filter == true){
     profilcombo.addItem(files[i].getName());
    }
    }
  }
  }

  public void loeschen_ActionPerformed(ActionEvent evt) {
  iconbild.setIcon(null);
  pfadtextfield.setText("");
  nametextfield.setText("");
  }

  public void profildelete_ActionPerformed(ActionEvent evt) {
  File profil = new File(System.getProperty("user.dir")+ "/" + profilcombo.getSelectedItem());
  if(profil.exists()){
    profil.delete();
    profilcombo.removeItem(profilcombo.getSelectedItem());
  }else{
    profildeleteShowMessageDialog();

  }






  }

  public void profildeleteShowMessageDialog() {
    JOptionPane.showMessageDialog(this, "Profil existiert bereits nicht mehr!", "Fehler beim Löschen", JOptionPane.ERROR_MESSAGE);
  }

  public void profilnameleerShowMessageDialog() {
    JOptionPane.showMessageDialog(this, "Es wurde kein Profilname eingegeben.", "", JOptionPane.ERROR_MESSAGE);
  }

  // Ende Methoden

  public static void main(String[] args) {
    new profiledit("Profil");
  }
}



Und hier will ich das Frame mit dem Button öffnen(die ActionPerformed besteht bereits)

Java:
import java.awt.*;
import java.awt.event.*;

/**
  *
  * Beschreibung
  *
  * @version 1.0 vom 21.03.2011
  * @author
  */

public class testframe extends Frame {
  // Anfang Attribute
  private Button button1 = new Button();
  // Ende Attribute

  public testframe(String title) {
    // Frame-Initialisierung
    super(title);
    addWindowListener(new WindowAdapter() {
      public void windowClosing(WindowEvent evt) { dispose(); }
    });
    int frameWidth = 300;
    int frameHeight = 300;
    setSize(frameWidth, frameHeight);
    Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
    int x = (d.width - getSize().width) / 2;
    int y = (d.height - getSize().height) / 2;
    setLocation(x, y);
    Panel cp = new Panel(null);
    add(cp);
    // Anfang Komponenten

    button1.setBounds(40, 48, 75, 25);
    button1.setLabel("button1");
    button1.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        button1_ActionPerformed(evt);
      }
    });
    cp.add(button1);
    // Ende Komponenten

    setResizable(false);
    setVisible(true);
  }

  // Anfang Methoden
  public void button1_ActionPerformed(ActionEvent evt) {
    // Hier soll das Frame geöffnet werden!!!!
  }

  // Ende Methoden

  public static void main(String[] args) {
    new testframe("testframe");
  }
}


Könnte mir evt. einer kurz beschreiben, wie ich in Zukunft so ein JDialog erstelle/gestalte und das einbinde? (2 kurze Codebeispiele).
Vielen Danke :)
Grüße
 
Zuletzt bearbeitet:

AmunRa

Gesperrter Benutzer
Ja dein profile erbt von JFrame und daher kannst du
in der deiner Methode

Java:
 public void button1_ActionPerformed(ActionEvent evt) {
    new profileedit("Editiere Profil")
  }

das hat aber nichts mit einem JDialog zu tun.


Weitere Punkte:
-profileedit ist eine Klasse und sollte daher mit einem Großbuchstaben beginnen. Ebenso testframe

-du mischt Swing mit AWT d.h. dein TestFrame erbt von Frame und ProfileEdit erbt von JFrame
du solltest TestFrame auch von JFrame erben lassen. wenn du dies aber machst musst du aufpassen da sich da auch ein Paar sachen dann in deinem Code ändern müssen.

Bezüglich Tutorials zu JDialog oder JFrame kannst du entweder im Forum in den Tutorials/FAQ lesen oder such in google nach "Tutorial Swing" oder tutorial JFrame oder tutorial JDialog da wirst du sicher etwas finden.
 
Zuletzt bearbeitet:

Blacksun91

Mitglied
Zu 2: wusste ich nicht.. versuche ich einzuführen
Zu 3: normalerweise mache ich das auch, aber ich hab das nur eben schnell flüchtig erstellt und nicht draufgeachtet.


Java:
new profiledit("Editiere Profil");
funktioniert leider nicht. Er sagt mir "Cannot access"...was muss ich noch im sagen?

Rufe ich Jdialogs genauso auf ?
 

AmunRa

Gesperrter Benutzer
Also bei mir funktioniert der Code ich habe jetzt die zwei Code stücke die du gepostet hast bei mir in Java-Files kopiert, kompiliert und ausgeführt und eben zuvor in die Methode so geändert
Java:
public void button1_ActionPerformed(ActionEvent evt) {
    new profiledit("Editiere Profil");
  }

ohne genaue Fehler meldung kann ich dir hier nicht helfen


JDialogs rufst du imprinzip genau gleich auf nur, dass sie einen andern Kontructor haben der mehr Werte entgegen nimmt. Siehe hierfür die API
 

Michael...

Top Contributor
In der Hinsicht sind JFrame und JDialog dasselbe. (JDialog kann z.B. eine Elternkomponente besitzen und wird nicht in der Taskbar angezeigt)

Dein Problem hat aber scheinbar nichts mit JFrame oder JDialog zu tun. Was Dir fehlt ist das grundlegende Wissen wie man "objektübergreifend" programmiert.
Wenn Du innerhalb einer Methode einer Klasse auf ein Objekt zugreifen willst, benötigt man einer Referenz auf dieses Objekt.
Entweder:
1. übergibt man diese Referenz unimttelbar der Methode
2. oder die Instanz der Klasse hält bereits eine Referenz auf dieses Objekt (z.B. Übergabe per Konstruktor oder per "set" - Methode)
3. oder das Objekt wird unmittelbar in der Methode erstellt
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Alex_99 Aktion ausführen wenn Frame disposed wurde Java Basics - Anfänger-Themen 5
frager2345 Fensterklasse, Wie auf Frame im Listender zugreifen (ItemEvents) Java Basics - Anfänger-Themen 7
S GUI Frame wechseln Java Basics - Anfänger-Themen 15
C Exportierte JAR öffnet zweiten Frame nicht mehr Java Basics - Anfänger-Themen 7
C Erkennen ob Frame geschlossen wurde Java Basics - Anfänger-Themen 2
C Erste Schritte Spieler an anderen Frame weitergeben Java Basics - Anfänger-Themen 23
G Probleme bei Frame aufgaben Java Basics - Anfänger-Themen 6
CptK Interface Klasse Frame (extends JFrame) aus anderer Klasse schließen Java Basics - Anfänger-Themen 7
S Interface (WindowBuilder) Panels in einen Frame einfügen Java Basics - Anfänger-Themen 10
S Nach dem Herüberschieben eines Arrays zwischen 2 Frames öffnet sich das Frame nicht mehr Java Basics - Anfänger-Themen 12
S in ActionListener auf Eingabe aus anderem Frame warten Java Basics - Anfänger-Themen 2
D Interface Frame doppelt durch Aufruf der GUI Klasse Java Basics - Anfänger-Themen 1
M Erste Schritte Neuen Frame nur einmal offen haben Java Basics - Anfänger-Themen 6
schoenosrockos JButton füllt immer das ganze frame Java Basics - Anfänger-Themen 1
R Erste Schritte Frame mit Ladebalken und BestätigungsButton Java Basics - Anfänger-Themen 10
das_leon Interface Frame in einem Frame (Window Builder) Java Basics - Anfänger-Themen 2
Anfänger2011 Frame zeigt nicht gewünschtes Ergebnis an ... Java Basics - Anfänger-Themen 5
Z Object Kreis am Frame abprallen lassen! Java Basics - Anfänger-Themen 12
D Bild in Frame einfügen Java Basics - Anfänger-Themen 11
I Methoden Schwierikeiten mit Protokollfenster (Frame Objekt) Java Basics - Anfänger-Themen 4
A mehrere Panels in eigenen Klasssen in einem Frame Java Basics - Anfänger-Themen 16
J Extra Fenster (Frame) Java Basics - Anfänger-Themen 20
W Frame in anderer Klasse anzeigen lassen Java Basics - Anfänger-Themen 1
E Von Instanz des Dialogs auf das Frame zugreifen Java Basics - Anfänger-Themen 8
E 2. JFrame erkennt 1. Frame Java Basics - Anfänger-Themen 6
C Bild ins Frame laden und Objekte drüber legen Java Basics - Anfänger-Themen 1
R File chooser Dateien in frame anzeigen lassen Java Basics - Anfänger-Themen 5
L bestimmten Frame anzeigen lassen? Java Basics - Anfänger-Themen 6
H Textfeldinhalt löschen nachdem Frame geschlossen wird Java Basics - Anfänger-Themen 8
L Kalender Java Frame Java Basics - Anfänger-Themen 7
A Frame Java Basics - Anfänger-Themen 3
P Verwirrung mit AWT Frame und main Methode Java Basics - Anfänger-Themen 19
A Frame java Java Basics - Anfänger-Themen 3
D Frame schließt gleich alle Frames Java Basics - Anfänger-Themen 5
T udp -> bytearray -> image -> ausgabe via frame Java Basics - Anfänger-Themen 6
J Erste Schritte Speichern / Speichern unter / title Frame Java Basics - Anfänger-Themen 5
F Frame in Frame Java Basics - Anfänger-Themen 3
U GUI - resize frame Java Basics - Anfänger-Themen 13
J Open reading Frame Java Basics - Anfänger-Themen 4
J Erstelltes Frame wird nicht angezeigt Java Basics - Anfänger-Themen 2
K Frame öffnen klappt nicht?! Java Basics - Anfänger-Themen 36
JAVAnnik Anwendung nach Schließen vom letzen Frame Java Basics - Anfänger-Themen 9
B Referenz zu anderen Frame Java Basics - Anfänger-Themen 10
A Frame Background Java Basics - Anfänger-Themen 21
S Klassen Klassenname = Frame? Java Basics - Anfänger-Themen 11
R Eingefärbtes Panel wird in Frame nicht angezeigt Java Basics - Anfänger-Themen 10
I Java - Text in neuem Frame wird nicht angezeigt Java Basics - Anfänger-Themen 4
M Frame mit mehreren areas Java Basics - Anfänger-Themen 14
R Button soll neuen Frame öffnen Java Basics - Anfänger-Themen 21
L Variablen Frame Variablen-Schleife Java Basics - Anfänger-Themen 3
D Neues Frame öffnen Java Basics - Anfänger-Themen 7
V Frame bleibt grau Java Basics - Anfänger-Themen 5
G Polygon in Frame zeichnen Java Basics - Anfänger-Themen 3
F frame wird nicht angezeigt? Java Basics - Anfänger-Themen 10
S 2 Panels in einen Frame Java Basics - Anfänger-Themen 5
H Panels in Frame einbinden Java Basics - Anfänger-Themen 3
E Frame neu Zeichnen Java Basics - Anfänger-Themen 3
A Bild wird auf Frame nicht angezeigt! Keine Fehlermeldung Java Basics - Anfänger-Themen 3
O Grafik in Frame laden Java Basics - Anfänger-Themen 9
T Frame öffnen Java Basics - Anfänger-Themen 6
I 1 Frame und mehrere Panels klappt nicht Java Basics - Anfänger-Themen 4
I JTable in bestehenden Frame integrieren Java Basics - Anfänger-Themen 6
Y Hilfe: JOGL / OPENGL in Frame Java Basics - Anfänger-Themen 2
J Frame schließen, Ereignis behandeln, Vorgang abbrechen Java Basics - Anfänger-Themen 4
Luk10 Frame schließen Java Basics - Anfänger-Themen 2
A Frame schließen!? Help! Java Basics - Anfänger-Themen 5
A Frame reagiert nicht Java Basics - Anfänger-Themen 6
H Modalen JDialog schließen, ohne dabei das Parent-Frame zu schließen Java Basics - Anfänger-Themen 7
J Frame bleibt schwarz beim Laden Java Basics - Anfänger-Themen 11
ModellbahnerTT Unterschied zwischen zwei Frame close Varianten Java Basics - Anfänger-Themen 3
R Frame Inhalt ausrichten Java Basics - Anfänger-Themen 5
MisterSeven Java Swing - Wie Frame größe festlegen?! Java Basics - Anfänger-Themen 10
E Verständnisfrage Syntax: frame.getContentPane().add(button) Java Basics - Anfänger-Themen 11
Stillmatic1985 Label in einem Frame zentrieren Java Basics - Anfänger-Themen 4
A Grafik erstellen und in Frame einfügen Java Basics - Anfänger-Themen 17
A Java Frame per X schließen? Java Basics - Anfänger-Themen 7
H2SO3- image beim awt frame wegmachen Java Basics - Anfänger-Themen 2
kulturfenster Panel in Frame integrieren Java Basics - Anfänger-Themen 5
kulturfenster Per Button Frame schliessen Java Basics - Anfänger-Themen 2
C Frame, JFrame, JDialog Java Basics - Anfänger-Themen 12
I JButton zum frame schließen Java Basics - Anfänger-Themen 6
M Variable in Frame anzeigen Java Basics - Anfänger-Themen 11
O Beim Schließen JDialog, im Frame-Owner eine Methode starten Java Basics - Anfänger-Themen 6
hdi Desktop-Auflösung abfragen -> setLocation() von Frame Java Basics - Anfänger-Themen 5
hdi keylistener hat keinen fokus oder: listener ohne frame? Java Basics - Anfänger-Themen 10
S Übergabe von Frame-Objekt - kritisch? Java Basics - Anfänger-Themen 7
N Frame in Frame erstellen Java Basics - Anfänger-Themen 2
B Java-Frame Taschenrechner - String -> Int und umgekehrt Java Basics - Anfänger-Themen 8
G Bild wird im falschen Frame angezeigt Java Basics - Anfänger-Themen 5
G Frame soll Focus behalten Java Basics - Anfänger-Themen 2
H Frame schließen Java Basics - Anfänger-Themen 5
G Frame Applet oder doch was anderes Java Basics - Anfänger-Themen 2
M Frame zeigt Desktop als Hintergrund Java Basics - Anfänger-Themen 2
J Eine swf-datei in einen Frame einfügen? Java Basics - Anfänger-Themen 6
K Schrift und Farben im Frame (Anfänger) Java Basics - Anfänger-Themen 2
D Frame in Center Screen Java Basics - Anfänger-Themen 7
A Frame aus Applet erzeugen und mit Inhalt füllen Java Basics - Anfänger-Themen 5
G Problemme mit: Aufruf einer Klasse aus einem Frame Java Basics - Anfänger-Themen 5
M Frame Schließen Java Basics - Anfänger-Themen 5
H homepage in frame aufrufen Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben