2 votes

Bouton de commande d'une toute nouvelle classe

Je veux que mon bouton exécute une toute nouvelle classe qui fera différentes choses à l'intérieur. Je ne sais pas si c'est possible car je suis vraiment mauvais en Java. Mon code ressemble à ceci pour le moment :

public class MainMenu {
    private class GardenActivities {
        public GardenActivities() {
            JFrame GardenAct = new JFrame();
            GardenAct.setSize(400, 400);
            GardenAct.setVisible(true);
        }
    }

    public static void main(String[] args) {
        JFrame choice = new JFrame();
        choice.setSize(700, 500);
        choice.setLocationRelativeTo(null);
        choice.setTitle("Seeds");
        choice.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JPanel panel = new JPanel();                                                        
        panel.setLayout(new GridLayout(0, 1));
        JButton Labora = new JButton();
        Labora.setText("Laboratory");
        Labora.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent ev) {
                      GardenActivities();
                }
        });

        JButton Garden = new JButton();
        Garden.setText("Garden");
        Garden.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent ev) {
            }
        });

        choice.getContentPane().add(panel);
        ButtonGroup group = new ButtonGroup();                                              
        group.add(Garden);
        group.add(Labora);
        panel.add(Garden);
        panel.add(Labora);
        choice.setVisible(true);
    }
}

Comme je l'ai dit. J'ai besoin de quelque chose pour faire fonctionner mon GardenActivities en appuyant simplement sur Garden bouton.

7voto

Hovercraft Full Of Eels Points 161146

Votre code ne se compile pas, n'est-ce pas ? Dans ce cas, vous devez indiquer les erreurs de compilation dans votre question afin que nous puissions vous aider.

Vous devez ajouter le mot clé nouveau avant la déclaration GardenActivities().

@Override
public void actionPerformed(ActionEvent ev) {
  new GardenActivities(); // here
}

De même, placez les activités de jardinage dans leur propre fichier. Il n'y a aucune raison d'en faire une classe interne privée et de nombreuses raisons de ne pas le faire.

Cela dit, je déconseille à une JFrame de créer et d'afficher une autre JFrame, car une application ne doit généralement comporter qu'une seule JFrame. Envisagez plutôt de permuter les "vues" des JPanels en utilisant un CardLayout, ou si vous devez afficher une fenêtre différente, envisagez d'afficher la seconde fenêtre dépendante sous la forme d'une boîte de dialogue modale ou non modale.

Encore des conseils non sollicités : Votre méthode principale en fait beaucoup trop. La plupart du code à l'intérieur de la méthode statique main devrait aller à l'intérieur de la classe non statique main gui, quelle qu'elle soit, peut-être dans son constructeur ou dans une classe initGui() que le constructeur appelle. La méthode main devrait simplement créer une instance de la classe gui principale, la rendre visible, et c'est à peu près tout.


Et en ce qui concerne :

Je ne sais pas si c'est possible car je suis très mauvais en Java.

Continuez à écrire des tas et des tas de codes, a tonne de code, et continuez à consulter des tutoriels et des manuels, et cela changera.

3voto

Lee Meador Points 7902

Une façon de faire ce que vous voulez, nous faisons le GardenActivities la classe met en œuvre ActionListener même.

Votre code ressemblerait alors à ceci :

Garden.addActionListener(new GardenActivities());

Sinon, votre plan devrait fonctionner.

NOTE

Voir les commentaires pour les opinions divergentes sur les raisons pour lesquelles une personne voudrait quitter l'Union européenne. ActionListener dans la classe interne anonyme et qu'elle fasse appel à GardenActivities .

Merci @HovercraftFullOfEels

3voto

James Williams Points 658

Je pense qu'il suffit d'ajouter :

new GardenActivities();

dans la fenêtre de votre JButton actionPerformed() méthode.

Bonne chance !

1voto

BlackHatSamurai Points 6211

Comme d'autres l'ont souligné, ceci :

 @Override
                public void actionPerformed(ActionEvent ev) 
                    {
                      GardenActivities();
                    }

Il devrait ressembler à ce qui suit

 @Override
                public void actionPerformed(ActionEvent ev) 
                    {
                      new GardenActivities();
                    }

Il n'y a aucune raison de créer une classe interne, et GardenActivities peut être, et devrait être, sa propre classe.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X