PDA

View Full Version : [Java] Problemi Grafica e Eventi


sasoriSR
22-12-2011, 14:53
ciao a tutti, ho un problema con la grafica di java, o meglio con il metodo

evt.getSoruce()


Il problema č principalmente in questo punto:
private void UGUActionPerformed(java.awt.event.ActionEvent evt){
System.out.println(evt.getSource() == btnSOT);
System.out.println(evt.getSource() == btnSOM);
System.out.println(evt.getSource() == btnDIV);
System.out.println(evt.getSource() == btnMOL);
}
Mi esce sempre false anche se premo i pulsanti giusti, se serve metto il resto del codice:


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

public class Gui2 extends JFrame
{
// VARIABILI DI ISTANZA

// oggetti grafici
JButton btnSOM;
JButton btnSOT;
JButton btnDIV;
JButton btnMOL;

/**
* Constructor for objects of class InterfacciaGui
*/
public Gui2()
{

// setto i parametri della finestra
setTitle("Calcolatrice Razionale by ...");
setBounds(100, 200, 500, 250);

// creiamo i vari oggetti grafici
Container cnt = getContentPane();
cnt.setLayout(null);


JButton btnSOM = new JButton("+");
btnSOM.setBounds(250, 10, 50, 50);

JButton btnSOT = new JButton("-");
btnSOT.setBounds(250, 60, 50, 50);

JButton btnDIV = new JButton("*");
btnDIV.setBounds(250, 110, 50, 50);

JButton btnMOL = new JButton("/");
btnMOL.setBounds(250, 160, 50, 50);

// aggiungo i pulsanti al pannello
cnt.add(btnSOM);
cnt.add(btnSOT);
cnt.add(btnDIV);
cnt.add(btnMOL);

// aggiungo gli eventi

btnSOM.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
UGUActionPerformed(evt);
}
});

btnSOT.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
UGUActionPerformed(evt);
}
});

btnDIV.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
UGUActionPerformed(evt);
}
});

btnMOL.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
UGUActionPerformed(evt);
}
});

setVisible(true);
setResizable(false);
}

private void UGUActionPerformed(java.awt.event.ActionEvent evt){
System.out.println("hai premuto");
System.out.println(evt.getSource() == btnSOT);
System.out.println(evt.getSource() == btnSOM);
System.out.println(evt.getSource() == btnDIV);
System.out.println(evt.getSource() == btnMOL);
}
}



Grazie a tutti in anticipo :)

banryu79
22-12-2011, 15:13
L'ho corretto, adesso funziona:

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

public class Gui2 extends JFrame
{
// VARIABILI DI ISTANZA

// oggetti grafici
JButton btnSOM;
JButton btnSOT;
JButton btnDIV;
JButton btnMOL;

/**
* Constructor for objects of class InterfacciaGui
*/
public Gui2()
{

// setto i parametri della finestra
setTitle("Calcolatrice Razionale by ...");
setBounds(100, 200, 500, 250);

// creiamo i vari oggetti grafici
Container cnt = getContentPane();
cnt.setLayout(null);


btnSOM = new JButton("+");
btnSOM.setBounds(250, 10, 50, 50);

btnSOT = new JButton("-");
btnSOT.setBounds(250, 60, 50, 50);

btnDIV = new JButton("*");
btnDIV.setBounds(250, 110, 50, 50);

btnMOL = new JButton("/");
btnMOL.setBounds(250, 160, 50, 50);

// aggiungo i pulsanti al pannello
cnt.add(btnSOM);
cnt.add(btnSOT);
cnt.add(btnDIV);
cnt.add(btnMOL);

// aggiungo gli eventi

btnSOM.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
UGUActionPerformed(evt);
}
});

btnSOT.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
UGUActionPerformed(evt);
}
});

btnDIV.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
UGUActionPerformed(evt);
}
});

btnMOL.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
UGUActionPerformed(evt);
}
});

setVisible(true);
setResizable(false);
}

private void UGUActionPerformed(java.awt.event.ActionEvent evt){
System.out.println("hai premuto");
System.out.println(evt.getSource() == btnSOT);
System.out.println(evt.getSource() == btnSOM);
System.out.println(evt.getSource() == btnDIV);
System.out.println(evt.getSource() == btnMOL);
}
}

Vedi la differenza? (c'č qualcosa in meno, rispetto al codice che hai postato te)

sasoriSR
22-12-2011, 15:30
Interessante, ma ma quindi non va mai messo in nessun caso?

banryu79
22-12-2011, 16:05
Interessante, ma ma quindi non va mai messo in nessun caso?
Scusa, ma non capisco che cosa intendi.
L'errore era dato dal fatto che le reference ai bottoni dichiarate come membri di istanza, non venivano neanche inizializzate con i JButton (il loro valore restava a null) perchč la creazione di dette istanze avveniva dentro al costruttore di Gui2 a beneficio perņ di altre 4 reference locali al metodo che erano state nominate come i membri di istanza, perņ non erano i membri di istanza, ma appunto, reference locali, ergo la loro esistenza terminava alla fine dell'esecuzione del costruttore (ciao ciao bottoni).

sasoriSR
22-12-2011, 16:38
ok, grazie di tutto :)

PS: se volete si puņ chiudere