Ciao a tutti, mi serve un aiuto:
in pratica ho un frame con 2 JButton e quando si clicca uno dei due si apre un nuovo frame. Non riesco pero a fare in modo di conoscere quale dei due è stato premuto; come devo fare???
Ciao a tutti, mi serve un aiuto:
in pratica ho un frame con 2 JButton e quando si clicca uno dei due si apre un nuovo frame. Non riesco pero a fare in modo di conoscere quale dei due è stato premuto; come devo fare???
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
Questo è il codice che ho:
public class NewGame3 extends JPanel implements MouseListener {
static JFrame frame3 = new JFrame();
Image immagine;
public NewGame3 (){
String path="C:/Users/andrea/Desktop/Immagini/uno.jpg";
immagine = Toolkit.getDefaultToolkit().createImage(path);
load(immagine);
}
public void load(Image immagine){
MediaTracker mt = new MediaTracker(frame3);
mt.addImage(immagine, 1);
try {
mt.waitForID(1);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void paintComponent(Graphics g){
super.paintComponent(g);
g.drawImage(immagine, 0, 0,720,480, null);
}
public void mouseClicked(MouseEvent arg0) {}
public void mouseEntered(MouseEvent arg0) {}
public void mouseExited(MouseEvent arg0) {}
public void mousePressed(MouseEvent arg0) {
frame3.setSize(720, 480);
Start_Menu start = new Start_Menu();
frame3.addKeyListener(start);
NewGame3 a = new NewGame3();
frame3.getContentPane().add(a);
frame3.setVisible(true);
}
public void mouseReleased(MouseEvent arg0) {
}
}
Nel "MousePressed" crea un nuovo frame dopo che il bottone è stato premuto (ti posto anche l'altro codice):
public class NewGame2 extends NewGame implements MouseListener {
static JFrame frame2 = new JFrame();
JButton scenario1 = new JButton("Scenario 1");
JButton scenario2 = new JButton("Scenario 2");
JButton scenario3 = new JButton("Casuale");
public NewGame2(){
scenario1.setDisplayedMnemonicIndex(3);
}
public void mouseClicked(MouseEvent arg0) {}
public void mouseEntered(MouseEvent arg0) {}
public void mouseExited(MouseEvent arg0) {}
public void mousePressed(MouseEvent arg0) {
frame.dispose();
GridLayout griglia = new GridLayout(5,5);
frame2.setSize(720, 480);
frame2.setLayout(griglia);
NewGame3 scenario_uno = new NewGame3();
scenario1.addMouseListener(scenario_uno);
NewGame3 scenario_due = new NewGame3();
scenario2.addMouseListener(scenario_due);
Icon primo_scenario = new ImageIcon("C:/Users/andrea/Desktop/immagini/uno.jpg");
JLabel primo = new JLabel();
primo.setIcon(primo_scenario);
Icon secondo_scenario = new ImageIcon("C:/Users/andrea/Desktop/immagini/due.jpg");
JLabel secondo = new JLabel();
secondo.setIcon(secondo_scenario);
frame2.add(new JLabel());
frame2.add(new JLabel());
frame2.add(new JLabel("SELEZIONA UNO SCENARIO"));
frame2.add(new JLabel());
frame2.add(new JLabel());
frame2.add(new JLabel());
frame2.add(primo);
frame2.add(secondo);
frame2.add(new JLabel());
frame2.add(new JLabel());
frame2.add(new JLabel());
frame2.add(new JLabel());
frame2.add(new JLabel());
frame2.add(new JLabel());
frame2.add(new JLabel());
frame2.add(new JLabel());
frame2.add(scenario1);
frame2.add(scenario2);
frame2.add(scenario3);
frame2.add(new JLabel());
frame2.add(new JLabel());
frame2.add(new JLabel());
frame2.add(new JLabel());
frame2.add(new JLabel());
frame2.add(new JLabel());
frame2.setVisible(true);
}
public void mouseReleased(MouseEvent arg0) {}
}
Io voglio sapere quale bottone è stato premuto...
Sui JButton generalmente si registra un ActionListener, se vuoi solo avere notifica della "azione". MouseListener è ovviamente anche usabile ma è più a basso livello e si usa per casi abbastanza particolari.
Quindi o implementi 2 ActionListener differenti, magari con delle anonymous inner class:
codice:scenario1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { // Il JButton scenario1 è stato premuto, fai quello che vuoi ... } }); scenario2.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { // Il JButton scenario2 è stato premuto, fai quello che vuoi ... } });
Oppure ne implementi uno solo, con una sola anonymous inner class, con una sola regular inner class o magari implementando ActionListener nella tua classe principale.
Es:
codice:public class MyFrame extends JFrame implements ActionListener { private JButton scenario1; private JButton scenario2; public MyFrame() { scenario1 = .... scenario2 = .... scenario1.addActionListener(this); scenario2.addActionListener(this); } public void actionPerformed(ActionEvent e) { Object source = e.getSource(); if (source == scenario1) { // Il JButton scenario1 è stato premuto, fai quello che vuoi ... } else if (source == scenario2) { // Il JButton scenario2 è stato premuto, fai quello che vuoi ... } } }
Questi non solo gli unici scenari possibili.
P.S. vedo una variabile JFrame static .... brutto.
Ultima modifica di andbin; 07-12-2015 a 20:13
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet