как создать окно с двумя кнопками, которое откроет новое окно - PullRequest
6 голосов
/ 07 января 2012

Мне нужна программа - основной JFrame имеет 2 кнопки

  1. button
  2. button2

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

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

У меня проблема, когда я открываю кнопку 1, затем открываю 2 окна, и главный JFrame все еще остается видимым.

Моя первая программа на качелях:

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class example {

public static void main (String[] args){    
  JFrame frame = new JFrame("Test");
  frame.setVisible(true);
  frame.setSize(500,200);
  frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

  JPanel panel = new JPanel();
  frame.add(panel);
  JButton button = new JButton("hello agin1");
  panel.add(button);
  button.addActionListener (new Action1());

  JButton button2 = new JButton("hello agin2");
  panel.add(button2);
  button.addActionListener (new Action2()); 
}
static class Action1 implements ActionListener {        
  public void actionPerformed (ActionEvent e) {     
    JFrame frame2 = new JFrame("Clicked");
    frame2.setVisible(true);
    frame2.setSize(200,200);
    JLabel label = new JLabel("you clicked me");
    JPanel panel = new JPanel();
    frame2.add(panel);
    panel.add(label);       
  }
}   
static class Action2 implements ActionListener {        
  public void actionPerformed (ActionEvent e) {     
    JFrame frame3 = new JFrame("OKNO 3");
    frame3.setVisible(true);
    frame3.setSize(200,200);

    JLabel label = new JLabel("kliknales");
    JPanel panel = new JPanel();
    frame3.add(panel);
    panel.add(label);
  }
}   
}

1 Ответ

6 голосов
/ 07 января 2012

Вы добавляете свой ActionListener дважды к button. Поэтому исправьте свой код для button2 до

  JButton button2 = new JButton("hello agin2");
  panel.add(button2);
  button2.addActionListener (new Action2());//note the button2 here instead of button

Кроме того, выполните операции Swing на правильной нити , используя EventQueue.invokeLater

...