web-dev-qa-db-fra.com

Comment créer une fenêtre avec deux boutons qui ouvriront une nouvelle fenêtre

J'ai besoin de programme - JFRAME PRINCIPAL AVEZ 2 BOUTONS

  1. bouton
  2. bouton2

Quand je clique bouton Il doit ouvrir une nouvelle fenêtre JFRAME avec de nouvelles options, tandis que si je clique Button2 puis ouvrez une autre fenêtre.

Dans ces 2 nouvelles fenêtres, je dois ajouter des boutons comme suivant et précédent.

J'ai un problème, lorsque j'ouvre le bouton 1, puis ouvrez 2 Windows et le JFrame principal est toujours visible.

Mon premier programme sur Swing:

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

Vous ajoutez votre ActionListener deux fois à button. Donc, corrigez votre code pour button2 à

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

En outre, effectuez vos opérations de swing sur le filetage correct en utilisant EventQueue.invokeLater

6
Robin