2017-01-27 1 views
1

Ich habe nach der letzten Stunde gesucht, aber ich war nicht in der Lage, die Lösung zu finden, die ich suche.Mehrere JOptionPane Eingabedialoge?

Ich möchte mehrere Eingaben vom Benutzer mit JOptionPane nehmen, aber ich möchte nicht alle in einem Dialogfenster sein. Ich möchte, dass es zum nächsten übergeht oder einfach das nächste Pop-up erscheinen lässt. Gibt es eine Möglichkeit, das mit JOptionPane zu tun?

Hier ist, was ich bisher habe:

import java.util.Scanner; 
import javax.swing.*; 
public class HomeWork2 { 


    public static void main(String[] args) { 

     Scanner input = new Scanner(System.in); 
     Scanner input2 = new Scanner(System.in); 
     Scanner input3 = new Scanner(System.in); 
     Scanner input4 = new Scanner(System.in); 
     int days, assignments; 
     double temperature; 
     boolean isRaining; 

     JOptionPane.showInputDialog("How many days are left?"); 
     days = input.nextInt(); 

     JOptionPane.showInputDialog("How many assignments are due?"); 
     assignments = input2.nextInt(); 

     JOptionPane.showInputDialog("What is the temperature outside?"); 
     temperature = input3.nextDouble(); 

     JOptionPane.showInputDialog("Is it raining today?"); 
     isRaining = input4.nextBoolean(); 

     if(assignments<=0) 
      JOptionPane.showMessageDialog(null, "Why are you asking in the first place?"); 
     else 
      if(days<5) 
       JOptionPane.showMessageDialog(null, "You need to hurry up, time is short."); 
      else 
       if(assignments>4) 
        JOptionPane.showMessageDialog(null, "You need to hurry up before the assignments pile up. Oh wait..."); 
       else 
        if(temperature<50) 
         JOptionPane.showMessageDialog(null, "You should start working, it's not like it's warm eoungh to do anything."); 
        else 
         if(isRaining==true) 
          JOptionPane.showMessageDialog(null, "It's raining, you might as well start on your assignments."); 
         else 
          JOptionPane.showMessageDialog(null, "It's nice out and you have some time to spare, go have fun."); 

     input.close(); 
     input2.close(); 
     input3.close(); 
     input4.close(); 

    } 

} 
+0

Bevor Sie auf ein Coding-Forum bitten, sollten Sie den Unterschied zwischen Java und js wissen –

+0

Sorry ... Es war unter den empfohlenen. Wie ich schon sagte, ich habe nur für ein paar Wochen programmiert. –

+2

1) Sie mischen 2 Paradigmen, Konsolenanwendungen und GUI-Anwendungen. Wenn Sie einige Wochen lang programmiert haben, empfehle ich Ihnen, zuerst die Grundlagen in Konsolenanwendungen zu lernen. 2) Zum Beispiel 'Scanner-Eingang = neuer Scanner (System.in);' Sie sollten nur eine von diesen haben, dann können Sie wie folgt tun: 'days = input.nextInt();' und 'assignments = input.nextInt(); '. 3) Um die Benutzereingabe in einer GUI-basierten Anwendung zu erhalten, könnten Sie ein ['JOptionPane # showInputDialog'] (https://docs.oracle.com/javase/tutorial/uiswing/components/dialog.html#input) verwenden. – Frakcool

Antwort

2

Neben meinen oben genannten Empfehlungen, hier sind einige andere, die den Code unten (BITTE LESEN SIE ALLE, BEVOR DER CODE TEIL NUR zu verstehen, benötigt werden,)

  1. lesen, was ein layout manager ist und wie sie funktionieren, nehmen vor allem einen Blick auf Grid Layout und Box Layout, Google für Beispiele und Erklärungen, wenn y Sie verstehen das Tutorial nicht.

  2. Lesen Sie was sind und wie sie funktionieren.

  3. Lesen Sie über die Event Dispatch Thread (EDT) und ihre function.

  4. Achten Sie darauf, dass Sie das Konsolenanwendungs-Paradigma und das GUI-Anwendungsparadigma nicht miteinander kombinieren. Verwenden Sie das eine oder das andere.

  5. Erfahren How to use Dialogs

  6. lesen how to convert a String o a int und schauen, wie man double konvertieren.

  7. Für Ihre boolean Feld würde ich ein JRadioButton einschließlich eines ButtonGroup und how to get which radiobutton was selected in a buttongroup verwenden:


Dieser Code sollte Ihnen einen Ausgangspunkt auf dem Weg, es selbst zu beenden

  • Die annoyingGui zwar kürzer, ist nicht mein Favorit, da es einen neuen Dialog für th öffnet e Benutzer jedes Mal, wenn Sie eine Eingabe von ihnen erhalten möchten, was ärgerlich ist.

  • Die singleDialogInformation() zeigt eine komplexere GUI eine JPanel und GridLayout zum Anfordern von Benutzerinformationen und eine BoxLayout zu zeigen, es zurück an den Benutzer, beachten Sie, dass ich nicht mit zwei verschiedenen Variablen, aber die Neuzuweisung der pane Variable auf eine Verwendung neue Instanz eines JPanel mit einem anderen Layout.


import java.awt.GridLayout; 

import javax.swing.BoxLayout; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JOptionPane; 
import javax.swing.JPanel; 
import javax.swing.JTextField; 
import javax.swing.SwingUtilities; 

public class UsingDialogsExample { 

    private JFrame frame; 
    private JPanel pane; 
    private JTextField daysField; 
    private JTextField assignmentField; 
    private int days = 0; 
    private int assignments = 0; 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       //Comment/uncomment one of them to see the output related to each sample method. 
//    new UsingDialogsExample().annoyingGui(); 
       new UsingDialogsExample().singleDialogInformation(); 
      } 
     }); 
    } 

    public void annoyingGui() { 
     frame = new JFrame("My Frame's Title"); 

     String daysInput = JOptionPane.showInputDialog(frame, "How many days are left?"); //Get user input on the textfield as a String 
     String assignmentsInput = JOptionPane.showInputDialog(frame, "How many assignments are due?"); 

     try { 
      days = Integer.parseInt(daysInput); //Convert the string gotten above to an int 
      assignments = Integer.parseInt(assignmentsInput); 
     } catch (NumberFormatException nfe) { 
      nfe.printStackTrace(); 
     } 

     JOptionPane.showMessageDialog(frame, "The number of days left is: " + days); 
     JOptionPane.showMessageDialog(frame, "The number of assignments due is: " + assignments); 
    } 

    public void singleDialogInformation() { 
     pane = new JPanel(); 
     pane.setLayout(new GridLayout(0, 2, 2, 2)); 

     daysField = new JTextField(5); 
     assignmentField = new JTextField(5); 

     pane.add(new JLabel("How many days are left?")); 
     pane.add(daysField); 

     pane.add(new JLabel("How many assignments are due?")); 
     pane.add(assignmentField); 

     int option = JOptionPane.showConfirmDialog(frame, pane, "Please fill all the fields", JOptionPane.YES_NO_OPTION, JOptionPane.INFORMATION_MESSAGE); 

     if (option == JOptionPane.YES_OPTION) { 

      String daysInput = daysField.getText(); 
      String assignmentsInput = assignmentField.getText(); 

      try { 
       days = Integer.parseInt(daysInput); 
       assignments = Integer.parseInt(assignmentsInput); 
      } catch (NumberFormatException nfe) { 
       nfe.printStackTrace(); 
      } 

      pane = new JPanel(); 
      pane.setLayout(new BoxLayout(pane, BoxLayout.PAGE_AXIS)); 

      pane.add(new JLabel("Days left: " + days)); 
      pane.add(new JLabel("Assignments due: " + assignments)); 

      JOptionPane.showMessageDialog(frame, pane); 
     } 
    } 
} 

Screenshots des annoyingGui:

enter image description hereenter image description here

Screenshots des singleDialogInformation:

enter image description hereenter image description here

+0

Diese Methode würde perfekt funktionieren, wenn ich dies aus Vergnügen (zumal ich diese Methode besser verstehe als die, die ich benutzen muss, aber leider nicht. Danke für die Hilfe, dass der Link, den du gegeben hast, wirklich hilfreich ist. –

+0

* wenn ich das zum Vergnügen machen würde * na wenn die Softwareentwicklung dich nicht befriedigt, solltest du sowieso nicht in einer Software Karriere sein ... =/Ich hoffe, dass meine Antwort dir eine Idee gibt und ob das deine Frage löst sicher sein, [akzeptieren] (http://stackoverflow.com/help/accepted-answer) es – Frakcool

+0

Sie missverstehen, ich genieße es zu programmieren. Was ich sagte war, wenn dies für mein persönliches Projekt oder Freizeitprogramm wäre, dann wäre das perfekt, es ist nur so, dass wir für diese Aufgabe nur bestimmte Befehle im Programm verwenden können. –