2015-03-11 2 views
0

Мне удалось создать начальный экран запуска (JFrame) для моей программы, но я не могу заставить кнопки перейти на экран, который я хочу. Я получаю ошибку, когда я пытаюсь построить это:Как я могу получить свой случай переключения на JFrame?

error: incompatible types: JFrame cannot be converted to int 

Вот мой код:

import javax.swing.*; 
    import javax.swing.JFrame; 
    public class MovieGenerator extends JFrame 
    {//Buttons 
    JButton titleButton; 
    JButton actorButton; 
    JButton genreButton; 
    JButton runtimeButton; 
    JButton ratingButton; 
    JButton addButton; 
    JButton randomButton; 
    //Main GUI 
    public MovieGenerator() 
    { 
     super("Main Menu"); 
     JFrame main = new JFrame(); 
     setLookAndFeel(); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setSize(1000,200); 
     GridLayout grid = new GridLayout(2,4); 
     setLayout(grid); 
     titleButton = new JButton("Sort by Title"); 
     actorButton = new JButton("Find by Actor"); 
     genreButton = new JButton("Sort by Genre"); 
     runtimeButton = new JButton("Sort by Runtime"); 
     ratingButton = new JButton("Sort by Rating"); 
     addButton = new JButton("Add a new movie to collection"); 
     randomButton = new JButton("Random movie"); 
     //Containers 
     add(titleButton); 
     add(actorButton); 
     add(genreButton); 
     add(runtimeButton); 
     add(ratingButton); 
     add(addButton); 
     add(randomButton); 
     setVisible(true); 
    } 
    public static void main(String[] args) throws IOException 
    { 
     MovieGenerator mov = new MovieGenerator(); 
     Scanner input = new Scanner(System.in); 
     JFrame main = new JFrame(); 
     switch (main) 
     { 
      case 0: 
      { 
       int titleButton = JOptionPane.showOptionDialog(null, "How do you want to sort?", "Main Menu",JOptionPane.DEFAULT_OPTION, JOptionPane.QUESTION_MESSAGE, null, 
      new Object[] {"Alphabetically Descending", "Alphabetically Ascending",}, " "); 
      } 
      // break; 

      case 1: 
      { 
       int genreButton = JOptionPane.showOptionDialog(null, "Set genre", "Sort by Genre",JOptionPane.DEFAULT_OPTION, JOptionPane.QUESTION_MESSAGE, null, 
      new Object[] {"Drama", "Comedy","Action/Adventure","Horror","Romance","SciFi/Fantasy","Western","Foreign","Animation"}, " "); 
      } 

      // break; 
      case 2: 
      {  
       int runtimeButton = JOptionPane.showOptionDialog(null, "Set runtime range", "Sort by Runtime",JOptionPane.DEFAULT_OPTION, JOptionPane.QUESTION_MESSAGE, null, 
      new Object[] {"90-110 minutes", "111-130 minutes","131-150 minutes","151-170 minutes","171+ minutes"}, " "); 
      } 
      // break; 
      case 3: 
      { 
       int ratingButton = JOptionPane.showOptionDialog(null, "Set ratings range", "Sort by Ratings",JOptionPane.DEFAULT_OPTION, JOptionPane.QUESTION_MESSAGE, null, 
      new Object[] {"Search 0-10%", "Search 11-20%","Search 21-30%", "Search 31-40%","Search 41-50%", 
          "Search 51-60%", "Search 61-70%","Search 71-80%", "Search 81-90%","Search 91-100%"}, " "); 
      } 
      // break; 
      case 4: 
      { 
       int randomButton = JOptionPane.showOptionDialog(null, "Randomize your selection", "Random!",JOptionPane.DEFAULT_OPTION, JOptionPane.QUESTION_MESSAGE, null, 
      new Object[] {"Randomize!"}, " "); 
      //break; 
      }   

     } 
    } 
} 
+0

Можете ли вы объяснить свою цель в этой строке 'int n = (int) main;'? –

+2

Я думаю, что у вас есть недоразумение о том, как работает GUI. GUI - это среда, управляемая событиями, то есть вам нужно подождать, пока что-то случится, а затем ответьте на него. См. [Создание графического интерфейса с помощью JFC/Swing] (http://docs.oracle.com/javase/tutorial/uiswing/), [Как использовать кнопки, флажки и кнопки радиосвязи] (http://docs.oracle .com/javase/tutorial/uiswing/components/button.html) и [Как написать прослушиватели действий] (http://docs.oracle.com/javase/tutorial/uiswing/events/actionlistener.html) для некоторых более подробно ... – MadProgrammer

ответ

0

"error: incompatible types: JFrame cannot be converted to int"

Ошибка сами пояснительная JFrame Объект не может быть преобразован в целом

int n = (int) main;//This line is the root cause 

и as JavaDocs Голосование

A switch works with the byte, short, char, and int primitive data types. It also works with enumerated types (discussed in Enum Types), the String class, and a few special classes that wrap certain primitive types: Character, Byte, Short, and Integer (discussed in Numbers and Strings).

Так коммутатор не будет работать с JFrame

+0

Даже когда я удаляю эту строку, я получаю ту же ошибку – csscrub

+0

Да, вы получите потому, что ящик коммутатора не поддерживает объект JFrame, прочитайте мой обновленный ответ –

+0

Итак, какой лучший способ я могу исправить это, чтобы сделать это работает? – csscrub

0

Как и другие ответы и комментарии состояние, вы не можете получить целое число от кадра. Свинг просто не работает.

Вместо этого вы можете добавить «исполнителей действий» к кнопкам. Это простые «обратные вызовы», которые вызываются при нажатии кнопки.

Это может быть сделан внутри конструктора MovieGenerator как этот

titleButton.addActionListener(new ActionListener() { 
    @Override 
    public void actionPerformed(ActionEvent e) { 
     int titleButton = JOptionPane.showOptionDialog(null, "How do you want to sort?", "Main Menu", JOptionPane.DEFAULT_OPTION, JOptionPane.QUESTION_MESSAGE, null, 
       new Object[] { "Alphabetically Descending", "Alphabetically Ascending", }, " "); 

    } 
}); 

или снаружи в основном метод с соответствующим геттером или дрожью, доступом к полю.

public static void main(String[] args) throws IOException { 
    MovieGenerator mov = new MovieGenerator(); 
    mov.getTitleButton().addActionListener(new ActionListener() { 
     @Override 
     public void actionPerformed(ActionEvent e) { 
      int titleButton = JOptionPane.showOptionDialog(null, "How do you want to sort?", "Main Menu", JOptionPane.DEFAULT_OPTION, JOptionPane.QUESTION_MESSAGE, null, 
        new Object[] { "Alphabetically Descending", "Alphabetically Ascending", }, " "); 

     } 
    }); 
    // etc 
} 
Смежные вопросы