Je fais une interface graphique qui a un Jmenu; il contient les éléments jmenu qui feront les choses quand on clique dessus. C'est le problème. J'ai regardé et regardé, mais je ne peux pas trouver comment le faire faire quand on clique dessus. En outre, je suis un peu un noob, donc si vous pouviez le faire de manière assez simple, ce serait génial!
Voici le code:
import Java.awt.Color;
import Java.awt.Component;
import javax.swing.*;
import Java.awt.event.ActionEvent;
import Java.awt.event.ActionListener;
import Java.awt.event.KeyEvent;
import javax.swing.*;
public abstract class windowMaker extends JFrame implements ActionListener {
private JMenu menuFile;
public static void main(String[] args) {
createWindow();
}
public static void createWindow() {
JFrame frame = new JFrame();
frame.setTitle("*Game Title* Beta 0.0.1");
frame.setSize(600, 400);
frame.setLocation(100, 100);
frame.setVisible(true);
frame.setResizable(false);
frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
frame.setJMenuBar(windowMaker.menuBarCreator());
frame.add(windowMaker.setTitle());
}
public static void launchURL(String s) {
String s1 = System.getProperty("os.name");
try {
if (s1.startsWith("Windows")) {
Runtime.getRuntime()
.exec((new StringBuilder())
.append("rundll32 url.dll,FileProtocolHandler ")
.append(s).toString());
} else {
String as[] = { "firefox", "opera", "konqueror", "epiphany",
"mozilla", "netscape" };
String s2 = null;
for (int i = 0; i < as.length && s2 == null; i++)
if (Runtime.getRuntime()
.exec(new String[] { "which", as[i] }).waitFor() == 0)
s2 = as[i];
if (s2 == null)
throw new Exception("Could not find web browser");
Runtime.getRuntime().exec(new String[] { s2, s });
}
} catch (Exception exception) {
System.out
.println("An error occured while trying to open the web browser!\n");
}
}
public static JMenuBar menuBarCreator() {
// create the menu parts
JMenuBar menuBar = new JMenuBar();
JMenu menuFile = new JMenu("File");
JMenu menuHelp = new JMenu("Help");
JMenuItem menuFileWebsite = new JMenuItem("Website");
JMenuItem menuFileExit = new JMenuItem("Exit");
JMenuItem menuHelpRules = new JMenuItem("Rules");
JMenuItem menuHelpAbout = new JMenuItem("About");
JMenuItem menuHelpHow = new JMenuItem("How To Play");
// make the shortcuts for the items
menuFile.setMnemonic(KeyEvent.VK_F);
menuHelp.setMnemonic(KeyEvent.VK_H);
// put the menu parts with eachother
menuBar.add(menuFile);
menuBar.add(menuHelp);
menuFile.add(menuFileWebsite);
menuFile.add(menuFileExit);
menuHelp.add(menuHelpRules);
menuHelp.add(menuHelpAbout);
menuHelp.add(menuHelpHow);
return menuBar;
}
public static Component setTitle() {
JLabel title = new JLabel("Welcome To *the game*");
title.setVerticalAlignment(JLabel.TOP);
title.setHorizontalAlignment(JLabel.CENTER);
return title;
}
}
BTW: Je veux que l'option de site Web (travaillons simplement avec ça pour l'instant) utilise la méthode launchURL; Je sais que l'on travaille.
Une JMenuItem
est une forme de bouton (AbstractButton
). Le modèle normal consiste à construire votre bouton avec un Action
(voir le constructeur de JMenuItem
). La Action
définit le nom et l'action à effectuer. La plupart des gens étendent AbstractAction
et implémentent actionPerformed
qui est invoquée lorsque le bouton est enfoncé.
Une implémentation possible pourrait ressembler à:
JMenuItem menuItem = new JMenuItem(new AbstractAction("My Menu Item") {
public void actionPerformed(ActionEvent e) {
// Button pressed logic goes here
}
});
ou:
JMenuItem menuItem = new JMenuItem(new MyAction());
...
public class MyAction extends AbstractAction {
public MyAction() {
super("My Menu Item");
}
public void actionPerformed(ActionEvent e) {
// Button pressed logic goes here
}
}
Notez que tout ce que j'ai dit ci-dessus s'applique également à JButton
. Jetez également un coup d'œil au très utile Comment utiliser les actions tutorial de Java.
Vous devez simplement ajouter un ActionListener à votre JMenuItem1 comme ceci:
jMenuItem1.addActionListener(new Java.awt.event.ActionListener() {
public void actionPerformed(Java.awt.event.ActionEvent evt) {
jMenuItem1ActionPerformed(evt);
}
});
puis implémenter l'action dans jMenuItem1ActionPerformed (evt):
private void jMenuItem1ActionPerformed(Java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
javax.swing.JOptionPane.showMessageDialog(null, "foo");
// more code...
}
Pour votre code:
...
JMenuItem menuFileWebsite = new JMenuItem("Website");
JMenuItem menuFileExit = new JMenuItem("Exit");
menuFileExit.addActionListener(new Java.awt.event.ActionListener() {
@Override
public void actionPerformed(Java.awt.event.ActionEvent evt) {
menuFileExitActionPerformed(evt);
}
});
JMenuItem menuHelpRules = new JMenuItem("Rules");
et:
private static void menuFileExitActionPerformed(Java.awt.event.ActionEvent evt) {
System.exit(0);
}
Pour ajouter des actions dans un bouton, créez un objet à partir de la classe qui implémente l'interface ActionListener:
menuFileWebsite.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
launchURL("http://www.google.com");
}
});
ici, nous créons un objet interne anonyme qui implémente l'interface Actionlistener et remplaçons la méthode actionperforemed pour effectuer son travail.
je fais quelques changements dans votre code, pour suivre la norme Java sur la classe de nommage, et créer des composants d'interface graphique dans EDT.
// WindowMakerDemo.Java
import Java.awt.Component;
import Java.awt.EventQueue;
import Java.awt.event.ActionEvent;
import Java.awt.event.ActionListener;
import Java.awt.event.KeyEvent;
import javax.swing.*;
public final class WindowMakerDemo {
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
JFrame frame = new MyFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setTitle("*Game Title* Beta 0.0.1");
frame.setSize(600, 400);
frame.setLocation(100, 100);
frame.setResizable(false);
frame.setVisible(true);
}
});
}
}
final class MyFrame extends JFrame{
public MyFrame() {
createWindow();
}
private void createWindow() {
setJMenuBar(menuBarCreator());
add(setTitle());
}
private JMenuBar menuBarCreator() {
// create the menu parts
JMenuBar menuBar = new JMenuBar();
JMenu menuFile = new JMenu("File");
JMenu menuHelp = new JMenu("Help");
JMenuItem menuFileWebsite = new JMenuItem("Website");
JMenuItem menuFileExit = new JMenuItem("Exit");
JMenuItem menuHelpRules = new JMenuItem("Rules");
JMenuItem menuHelpAbout = new JMenuItem("About");
JMenuItem menuHelpHow = new JMenuItem("How To Play");
// website button action
menuFileWebsite.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
launchURL("http://www.google.com");
}
});
// exit action
menuFileExit.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
// make the shortcuts for the items
menuFile.setMnemonic(KeyEvent.VK_F);
menuHelp.setMnemonic(KeyEvent.VK_H);
// put the menu parts with eachother
menuBar.add(menuFile);
menuBar.add(menuHelp);
menuFile.add(menuFileWebsite);
menuFile.add(menuFileExit);
menuHelp.add(menuHelpRules);
menuHelp.add(menuHelpAbout);
menuHelp.add(menuHelpHow);
return menuBar;
}
private Component setTitle() {
JLabel title = new JLabel("Welcome To *the game*");
title.setVerticalAlignment(JLabel.TOP);
title.setHorizontalAlignment(JLabel.CENTER);
return title;
}
private void launchURL(String s) {
String s1 = System.getProperty("os.name");
try {
if (s1.startsWith("Windows")) {
Runtime.getRuntime().exec((new StringBuilder()).append("rundll32 url.dll,FileProtocolHandler ").append(s).toString());
} else {
String as[] = {"firefox", "opera", "konqueror", "epiphany",
"mozilla", "netscape"};
String s2 = null;
for (int i = 0; i < as.length && s2 == null; i++) {
if (Runtime.getRuntime().exec(new String[]{"which", as[i]}).waitFor() == 0) {
s2 = as[i];
}
}
if (s2 == null) {
throw new Exception("Could not find web browser");
}
Runtime.getRuntime().exec(new String[]{s2, s});
}
} catch (Exception exception) {
System.out.println("An error occured while trying to open the web browser!\n");
}
}
}