2013-05-22 3 views
1

Я пытаюсь открыть Новое окно, нажав JButton. Теперь мой метод actionPerformed для Jbutton просто закрывает окно после нажатия. Я хочу, чтобы он открыл новое окно, когда старое окно закрывается. Я знаю, этот вопрос уже задан, но я много чего пробовал, никто, кажется, не работает отлично.Открыть новое окно кнопкой Нажмите

import javax.swing.*; 
    import javax.swing.event.*; 
    import java.awt.*; 
    import java.awt.event.*; 
    import java.text.*; 
    import java.util.Random; 

    public class secondTab extends JFrame 
     { 
      static JTabbedPane Pane = new JTabbedPane(); 

      static JPanel Second = new JPanel(); 
      static JPanel second = new JPanel(); // This Panel is inside the Second Panel 

      static JButton guess1 = new JButton(); 
      static String words[] = new String[9]; 

      static Random getRandomWord = new Random(); 

      static int rr; 
      static JButton Labels[] = new JButton[10]; 

    public static void main(String args[]) 
     { 
      //construct frame 
      new secondTab().show(); 
     } 

    public secondTab() 
     { 
      // code to build the form 
      setTitle("Shopping Cart"); 

      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
      getContentPane().setLayout(new GridBagLayout()); 

      // position tabbed pane 
      GridBagConstraints gridConstraints = new GridBagConstraints(); 
      gridConstraints.gridx = 1; 
      gridConstraints.gridy = 1; 
      Pane.setForeground(Color.YELLOW); 
      Pane.setBackground(Color.MAGENTA); 

      getContentPane().add(Pane, gridConstraints); 
      getContentPane().setLayout(new GridBagLayout()); 


     // Tabs Starts From Here 

      Second.setLayout(new GridBagLayout()); 

      words[1] = "JAVA"; 
      words[2] = "FLOAT"; 
      words[3] = "VOID"; 
      words[4] = "MAIN"; 
      words[5] = "STATIC"; 
      words[6] = "FINAL"; 
      words[7] = "PRIVATE"; 
      words[8] = "CHAR"; 
      words[9] = "IF"; 


      rr = getRandomWord.nextInt(10); 

      for(int i = 1; i <=words[rr].length(); i++) 
       { 
        Labels[i] = new JButton(); 
        gridConstraints.gridx = 0; 
        gridConstraints.gridy = 0; 
        second.add(Labels[i]); 
       } 


      gridConstraints.gridx= 0; 
      gridConstraints.gridx= 0; 
      Second.add(second, gridConstraints); 


      guess1.setText("New Word"); 
      gridConstraints.gridx = 0; 
      gridConstraints.gridy = 2; 
      Second.add(guess1, gridConstraints); 

Здесь Действие Выполняется метод моей кнопки

  // Action Performed method for the JButton guess1 
      guess1.addActionListener(new ActionListener() 
       { 
        public void actionPerformed(ActionEvent e) 
         { 
          dispose(); 
         } 
       }); 



      Pane.addTab("Game ", Second); 

      pack(); 
      Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); 
      setBounds((int) (0.5 * (screenSize.width - getWidth())), (int) (0.5 * 
        (screenSize.height - getHeight())), getWidth(), getHeight()); 
     } 

    } 
+0

Не использовать статические переменные. Используйте стандартные соглашения об именах Java. Имена переменных не должны начинаться с символа верхнего регистра. – camickr

+0

@camickr: Из всего этого единственное, что вас беспокоило, это переменные, начиная с буквы верхнего регистра? : D – gkalpak

ответ

2

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

 JTabbedPane Pane = new JTabbedPane(); 
    JPanel Second = new JPanel(); 
    JPanel second = new JPanel(); // This Panel is inside the Second Panel 
    JButton guess1 = new JButton(); 
    String words[] = new String[10]; 
    Random getRandomWord = new Random(); 
    int rr; 
    JButton Labels[] = new JButton[10]; 

вы должны создать новый экземпляр того же класса и показать его

 guess1.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e) { 
       dispose(); 
       new secondTab().show(); 
      } 
     }); 
+0

Это работает ... !! Thanx ... !! – CrazyPixi

4

Просто добавьте новое заявление панели после Dispose(). например: добавить

guess1.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e) { 
       dispose(); 
       new JFrame("New Window").show(); 
      } 
     }); 

и еще один момент - вы создали массив из 9 элементов, и вы пытаетесь вставить в 10 индекса, который проливает ArrayIndexOutOfBound исключение.

+0

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

0
Hi, 

     Please try like this.. It may help.. 

guess1.addActionListener(new ActionListener() 
       { 
        public void actionPerformed(ActionEvent e) 
         { 
           dispose(); 
          new AnotherJFrame(); 
         } 
       } 
--------------------------------------------- 

import javax.swing.JFrame; 
import javax.swing.JLabel; 

public class AnotherJFrame extends JFrame 
{ 
    public AnotherJFrame() 
    { 
     super("Another GUI"); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     add(new JLabel("Empty JFrame")); 
     pack(); 
     setVisible(true); 
    } 
} 
+0

На самом деле, я хочу, чтобы моя программа снова запускалась, нажимая кнопку. Например, когда окно закрывается, одна и та же программа запускается автоматически. Может быть, есть какой-либо метод, который может обновить Panel – CrazyPixi

1

Таким образом, вместо этого закрытие текущего окна и создание нового экземпляра окна, что просто раздражает (и немного лениво).

Вы должны предоставить средства, с помощью которых вы можете сбросить состояние своего пользовательского интерфейса.

Вы должны сделать это с помощью вызова метода, который сбрасывает внутреннее состояние и обновляет пользовательский интерфейс.

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

Мигание кадров плохая идея - ИМХО

+0

https://www.youtube.com/watch?v=Tx5QsET9IWs .. пожалуйста, посмотрите это видео, запустите видео на 0,46 секунды. В этом видео, когда человек нажимает на кнопке «Получить новое слово» программа закрывается и автоматически запускается – CrazyPixi

+0

Итак, вам действительно не нужно закрывать и открывать новое окно, просто обновить его состояние? – MadProgrammer

+0

Извините за путаницу. Сэр ... да, я хочу обновить его состояние. – CrazyPixi

-1

увидеть ссылку ниже ... Это может помочь вам ..

Java swing application, close one window and open another when button is clicked

+0

https://www.youtube.com/watch?v=Tx5QsET9IWs .. пожалуйста, посмотрите это видео, запустите видео на 0,46 секунды. В этом видео, когда человек нажимает кнопку «Получить новое слово», программа закрывается и автоматически запускается – CrazyPixi

+0

Thanx ... для вашей помощи .... !!, я знаю, что вы много искали, очень благодарны за ваши усилия. но проблема решена сейчас ... !! – CrazyPixi

0

Я вижу, что на ваш вопрос был дан ответ, так что это не касается вашей проблемы. Я просто подумал, что я разделю некоторые вещи, которые вы могли бы хотеть condider фиксации:

  1. Не используйте show()/hide(), потому что они являются устаревшими. [More info]
    Использовать setVisible(true/false) соответственно. [More info]

  2. Вам не нужно, чтобы добавить новый «GridBagLayout()» перед добавлением каждого компонента в том же контейнере. То есть, Вы можете удалить второй getContentPane().setLayout(new GridBagLayout()); [More info]

  3. Просто убедитесь, что вы понимаете, что массив индексов в Java (и все языки программирования, я знаю, спосо - что не так много ... но до сих пор) являются на основе нуля! [More info]

  4. Для того чтобы найти центр «полезного» размера экрана Toolkit.getDefaultToolkit().getScreenSize(); не достаточно, так как она включает в себя экранную-врезке (например, не видимые поля, панели задач и т.д.). Вы также должны использовать Toolkit.getDefaultToolkit().getScreenInsets(GraphicsConfiguration); и выровнять левую и правую вставками ширины экрана, а также верхнюю и нижнюю вставки с высоты экрана.

  5. Если все, что вам нужно, это центр JFrame на экране, вы можете просто использовать setLocationRelativeTo(null). [More info]

+0

Вау, это много полезной информации. На самом деле Thanx ... – CrazyPixi

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