2017-01-27 6 views
1

Я искал последний час, но я не смог найти решение, которое я ищу.Несколько диалоговых окон ввода JOptionPane?

Я хочу использовать несколько входов от пользователя, используя JOptionPane, но я не хочу, чтобы все они были в одном диалоговом окне. Я хочу, чтобы он перешел к следующему или просто заставил следующего появиться. Есть ли способ сделать это, используя JOptionPane?

Вот что я до сих пор:

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

Прежде чем задать вопрос на форуме по кодированию, вы должны знать разницу между java и js –

+0

Извините ... Это было по рекомендации. Как я уже сказал, я кодировал только несколько недель. –

+2

1) Вы смешиваете 2 парадигмы, консольные приложения и графические приложения, если вы кодировали несколько недель, я рекомендую вам сначала начать изучение основ в консольных приложениях. 2) Например, 'Scanner input = new Scanner (System.in);' у вас должен быть только один из них, тогда вы можете сделать как 'days = input.nextInt();' и 'assignments = input.nextInt(); '. 3) Чтобы получить пользовательский ввод в приложении на основе графического интерфейса, вы можете использовать ['JOptionPane # showInputDialog'] (https://docs.oracle.com/javase/tutorial/uiswing/components/dialog.html#input). . – Frakcool

ответ

2

Помимо моих вышеуказанных рекомендаций, вот некоторые другие, которые будут необходимы, чтобы понять приведенный ниже код (ПРОЧТИТЕ ИХ ВСЕ ПЕРЕД ИДТИ ЗА КОДА ЧАСТЬ ТОЛЬКО)

  1. Читайте то, что layout manager и как они работают, особенно обратите внимание на Grid Layout и Box Layout, Google примеров и объяснений, если у ou не понимает учебник.

  2. Прочтите, что такое и как они работают.

  3. Подробнее о Event Dispatch Thread (EDT) и его function.

  4. Будьте осторожны, чтобы не смешивать парадигму приложения приложений и графический интерфейс приложения. Используйте один или другой.

  5. Learn How to use Dialogs

  6. Читать how to convert a String o a int и посмотрите, как конвертировать в double.

  7. Для вашего boolean поле я бы использовать JRadioButton включая ButtonGroup и how to get which radiobutton was selected in a buttongroup:


Этот код должен дать вам отправную точку на вашем пути, чтобы закончить его самостоятельно

  • annoyingGui в то время как короче, не мой любимый, так как он открывает новое диалоговое окно для th каждый пользователь, каждый раз, когда вы хотите получить импорт, что раздражает.

  • The singleDialogInformation() отображает более сложный графический интерфейс с использованием JPanel и GridLayout для запроса информации пользователя и BoxLayout, чтобы показать его обратно пользователю, обратите внимание, что я не использую 2 разных переменных, но переназначение переменной pane к новый экземпляр JPanel с другой компоновкой.


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); 
     } 
    } 
} 

Скриншоты annoyingGui:

enter image description hereenter image description here

Скриншоты singleDialogInformation:

enter image description hereenter image description here

+0

Этот метод работал бы отлично, если бы я делал это для удовольствия (тем более, что я понимаю этот метод лучше, чем тот, который я должен использовать), но, к сожалению, я этого не делаю. Спасибо за помощь, хотя эта ссылка, которую вы дали, действительно полезна. –

+0

* Если бы я делал это ради удовольствия * хорошо, если разработка программного обеспечения вас не удовлетворяет, вы все равно не должны быть в карьере программного обеспечения ... =/Я надеюсь, что мой ответ даст вам идею, и если это решает ваш вопрос обязательно [принять] (http://stackoverflow.com/help/accepted-answer) – Frakcool

+0

Вы неправильно понимаете, мне нравится программировать. Я говорил, что если бы это было для моего личного проекта или программирования для отдыха, тогда это было бы прекрасно, просто для этого задания мы можем использовать только определенные команды в программе. –

Смежные вопросы