[Java] Während Methode Fenster öffnen und Variable ablesen

01/25/2014 21:56 Chicken17#1
Hey,

in meinem Programm läuft ne Methode ab. Irgendwann muss dann ein Key eingelesen werden. Ich bekomme es aber einfach nicht hin, dass sich in meiner Methode irgendwann ein simples Fenster öffnet, das ein Text Feld, ein Label und einen Knopf enthält und beim Knopf Druck den Text aus dem Feld einliest und als String speichert, welcher in dann in meiner Methode weiter verwendet werden soll.

Wäre cool wenn mir jemand helfen kann :)
01/25/2014 22:21 XxharCs#2
Sagt dir JOptionPane etwas? Mit dem kann man ganz simpel dein Problem lösen.
[Only registered and activated users can see links. Click Here To Register...]

Code:
String input =  JOptionPane.showInputDialog(null, "Enter in some text:");
if(input != null) {
    // do your work here
}
01/25/2014 22:24 Zunft#3
Wenn ich dich richtig verstehe willst du innerhalb einer Methode ein JFrame bzw. ein Fenster öffnen.
Das geht folgendermaßen:

Code:

NAME_DES_JFRAMES t;

[...]
public void oeffneframe()
{
t = new NAME_DES_JFRAMES();
}
Um das Fenster zu designen solltest du dann eine passende Entwicklungsemgebung verwenden. Ich benutze hierfür NetBeans.

Beim Druck auf Knopf einlesen(Snippet):
Code:
public static String inhalt = null;

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        inhalt = jTextField1.getText().toString();
        jLabel1.setText(inhalt);
    }
Kompletter Code (inklusive Frame) - generiert mit Netbeans:



Um den String 'inhalt' dann in einer anderen Klasse zu verwenden muss der String public static sein. Verwenden tust du diesen dann folgendermaßen:

Code:
NAME_DES_JFRAMES t;

[...]
public void oeffneframe()
{
System.out.println(t.inhalt);
}
01/25/2014 22:47 Chicken17#4
@ XxharCs Dich wollte ich vorhin schon anschreiben aber du warst nicht on :D

Boar man, da hätte ich mir das ewige (!) rumprobieren sparen können! Vielen Dank, genau das was ich gebraucht hab. Die Funktion war mir noch nicht bekannt :)




@Zunft Danke, genau so wollte ich das auch lösen, bloß mein Problem war: wie kann ich bei der Netbeans GUI einstellen, dass das Fenster nicht von vorn herein offen ist sondern erst später geöffnet wird? :)
01/25/2014 22:59 Zunft#5
Quote:
Originally Posted by Chicken17 View Post
@Zunft Danke, genau so wollte ich das auch lösen, bloß mein Problem war: wie kann ich bei der Netbeans GUI einstellen, dass das Fenster nicht von vorn herein offen ist sondern erst später geöffnet wird? :)
Erstell doch einfach eine zweite Klasse von wo du, wenn du das Fenster haben willst aufrufst.

Du könntest auch initComponents woanders hinpacken, nur dann sieht dein Fenster so aus:
[Only registered and activated users can see links. Click Here To Register...]

Ansonsten ist mir keine weitere Möglichkeit bekannt.
01/25/2014 23:02 Chicken17#6
Quote:
Originally Posted by Zunft View Post
Erstell doch einfach eine zweite Klasse von wo du, wenn du das Fenster haben willst aufrufst.

Du könntest auch initComponents woanders hinpacken, nur dann sieht dein Fenster so aus:
[Only registered and activated users can see links. Click Here To Register...]

Ansonsten ist mir keine weitere Möglichkeit bekannt.

Stimmt, so könnte ich das auch lösen :) Danke!
01/25/2014 23:31 dowhile#7
Oder ohne Form-Designer:

Quote:
JFrame frame = new JFrame();
final JTextField text = new JTextField();
JButton button = new JButton();
frame.add(text);
frame.add(button);
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println(text.getText());
}
}
frame.setVisible(true);
01/25/2014 23:34 Chicken17#8
Habe die Methode von XxharCs genommen. Weiß da jemand wie ich bei

PHP Code:
String code javax.swing.JOptionPane.showInputDialog"Key eingeben" );
    
System.out.println(code); 
Dafür sorgen kann, dass der Dialog immer im Vordergrund bleibt? :)
01/25/2014 23:55 XxharCs#9
Habe mal eine noch schönere Lösung gefunden als die aus der PN: JDialog.

Code:
JDialog dialog = new JOptionPane("Enter text in here:", JOptionPane.QUESTION_MESSAGE,JOptionPane.DEFAULT_OPTION).createDialog("Input"); 
dialog.setAlwaysOnTop(true);
dialog.setVisible(true);
dialog.dispose();

if( dialog.getValue() instanceOf String){
       String myString = (String) dialog.getValue();
}
Vom Handy gesendet. Ich hoffe dieser Ansatz funktioniert, schreibe sowas zum ersten mal :p

Edit: Wenn es nicht geht, musst du dich aufjedenfall mit JDialog und JOptionPane beschäftigen. Kann grad schlecht vom Handy aus was rumprobieren, morgen erst wieder.
01/26/2014 00:04 Chicken17#10
Quote:
Originally Posted by XxharCs View Post
Habe mal eine noch schönere Lösung gefunden als die aus der PN: JDialog.

Code:
JDialog dialog = new JOptionPane("Enter text in here:", JOptionPane.QUESTION_MESSAGE,JOptionPane.DEFAULT_OPTION).createDialog("Input"); 
dialog.setAlwaysOnTop(true);
dialog.setVisible(true);
dialog.dispose();

if( dialog.getValue() instanceOf String){
       String myString = (String) dialog.getValue();
}
Vom Handy gesendet. Ich hoffe dieser Ansatz funktioniert, schreibe sowas zum ersten mal :p

So wäre es immer im Vordergrund, bloß wie füge ich da jetzt noch einen Feld hinzu wo ich einen Text eingeben kann und die Schleife enthält einen Fehler :(
01/26/2014 00:21 Zunft#11
Quote:
Originally Posted by Chicken17 View Post
Quote:
Originally Posted by XxharCs View Post
Habe mal eine noch schönere Lösung gefunden als die aus der PN: JDialog.

Code:
JDialog dialog = new JOptionPane("Enter text in here:", JOptionPane.QUESTION_MESSAGE,JOptionPane.DEFAULT_OPTION).createDialog("Input"); 
dialog.setAlwaysOnTop(true);
dialog.setVisible(true);
dialog.dispose();

if( dialog.getValue() instanceOf String){
       String myString = (String)dialog.getValue();
}
Vom Handy gesendet. Ich hoffe dieser Ansatz funktioniert, schreibe sowas zum ersten mal :p

Edit: Wenn es nicht geht, musst du dich aufjedenfall mit JDialog und JOptionPane beschäftigen. Kann grad schlecht vom Handy aus was rumprobieren, morgen erst wieder.
So wäre es immer im Vordergrund, bloß wie füge ich da jetzt noch einen Feld hinzu wo ich einen Text eingeben kann und die Schleife enthält einen Fehler :(
Code:
String myString = dialog.getValue().toString();
Da ist der Fehler.


Und hier das Textfeld auf JOptionPane:
Code:
import javax.swing.JFrame;
import javax.swing.JOptionPane;

public class InputPopUps {

  public static void main(String[] a) {
    JFrame frame = new JFrame();
    Object result = JOptionPane.showInputDialog(frame, "Hier Eingabe");

    System.out.println(result);
  }

}

Quote:
Originally Posted by Chicken17 View Post
So wäre es immer im Vordergrund, bloß wie füge ich da jetzt noch einen Feld hinzu wo ich einen Text eingeben kann und die Schleife enthält einen Fehler :(
Btw: Bei uns im Informatik-Kurs muss jemand der "if-Schleife" sagt immer einen Kuchen backen - es ist nämlich eine if-Verzweigung
01/26/2014 00:29 Chicken17#12
Quote:
Originally Posted by Zunft View Post
Code:
String myString = dialog.getValue().toString();
Da ist der Fehler.


Und hier das Textfeld auf JOptionPane:
Code:
import javax.swing.JFrame;
import javax.swing.JOptionPane;

public class InputPopUps {

  public static void main(String[] a) {
    JFrame frame = new JFrame();
    Object result = JOptionPane.showInputDialog(frame, "Hier Eingabe");

    System.out.println(result);
  }

}



Btw: Bei uns im Informatik-Kurs muss jemand der "if-Schleife" sagt immer einen Kuchen backen - es ist nämlich eine if-Verzweigung


Danke, werde das morgen mal probieren, bin nicht mehr am PC.

Bei dem mit der "if schleife" hab ich mich neulich selbst schon ertappt, weiß auch nicht wo ich mir das angeeignet habe :D
01/26/2014 00:33 Zunft#13
Quote:
Originally Posted by Chicken17 View Post
Danke, werde das morgen mal probieren, bin nicht mehr am PC.

Bei dem mit der "if schleife" hab ich mich neulich selbst schon ertappt, weiß auch nicht wo ich mir das angeeignet habe :D
Code:
import javax.swing.JFrame;
import javax.swing.JOptionPane;

public class tst {

  public static void main(String[] a) {
    JFrame frame = new JFrame();
    Object result = JOptionPane.showInputDialog(frame, "Hier Eingabe");

    System.out.println(result);
    if (result.toString().equals("123"))
    {
        JOptionPane.showMessageDialog(frame, "Herzlichen Glueckwunsch sie haben 123 eingegeben!");
    }
    else
    {
        JOptionPane.showMessageDialog(frame, "Sie haben leider nicht 123 eingegeben.");
    }
}
  }
Ich hab mal noch deine if-Verzweigung mit in das Programm eingebracht.
01/26/2014 14:41 Chicken17#14
Quote:
Originally Posted by Zunft View Post
Code:
import javax.swing.JFrame;
import javax.swing.JOptionPane;

public class tst {

  public static void main(String[] a) {
    JFrame frame = new JFrame();
    Object result = JOptionPane.showInputDialog(frame, "Hier Eingabe");

    System.out.println(result);
    if (result.toString().equals("123"))
    {
        JOptionPane.showMessageDialog(frame, "Herzlichen Glueckwunsch sie haben 123 eingegeben!");
    }
    else
    {
        JOptionPane.showMessageDialog(frame, "Sie haben leider nicht 123 eingegeben.");
    }
}
  }
Ich hab mal noch deine if-Verzweigung mit in das Programm eingebracht.
Die if Verzweigung brauch ich nicht, aber bei dem was du mir jetzt geschrieben hast kann ich das dialog.setAlwaysOnTop(true); ja nicht mit einbauen....
Ich brauch einfach das von XxharCs (wo das mit dem setAlwaysOnTop funktioniert) mit einem Textfeld und Knopf zum eingeben. Dort steht bloß "Hier bitte eingeben" aber ich kann ja nix eingeben.

Wenn ich bei dir
PHP Code:
frame.setAlwaysOnTop(true);
frame.setVisible(true);
frame.dispose(); 
einfüg ändert sich gar nichts :)
01/26/2014 14:47 Zunft#15
Quote:
Dort steht bloß "Hier bitte eingeben" aber ich kann ja nix eingeben.
Code:
showInputDialog(frame, "Hier Eingabe");
Hier zeigt der eine MessagBox mit einem Label, wodrin "Hier Eingabe" steht, einem Textfeld und zwei Buttons (OK, ABBRECHEN), also kannst du was eingeben.

Quote:
bei dem was du mir jetzt geschrieben hast kann ich das dialog.setAlwaysOnTop(true); ja nicht mit einbauen....
Dann änder doch einfach

Code:
Object result = JOptionPane.showInputDialog(frame, "Hier Eingabe");
in

Code:
JDialog dialog = JOptionPane.showInputDialog(frame, "Hier Eingabe"); 
dialog.setAlwaysOnTop(true);
dialog.setVisible(true);
dialog.dispose();
Ich habs jetzt noch nicht ausprobiert, sollte aber eigentlich funktionieren.