PDA

Visualizza la versione completa : [JAVA]: Chiamare metodo di una classe su pressione pulsante


 
gax80
12-06-2006, 12:00
ciao ragazzi
come faccio a richiamare una classe premendo un bottone...
cioè su uan form ho un botton con un evento che se pigiato mi deve richiamare un'altra classe


:messner:

perzem
12-06-2006, 12:28
nomeclasse c=new costruttoreclasse(eventuali parametri);

andbin
12-06-2006, 12:30
Originariamente inviato da gax80
ciao ragazzi
come faccio a richiamare una classe premendo un bottone...
cioè su uan form ho un botton con un evento che se pigiato mi deve richiamare un'altra classeCosa intendi per "richiamare una classe"??? Eseguire un metodo di quella classe?? (che sarebbe la cosa più ovvia)
Poi cosa non ti è chiaro: come gestire l'evento del pulsante o altro??

gax80
12-06-2006, 12:54
io ho su una form un bottone che mi apre un altro frame, e il codice di questo frame lho inserito nella classe principale, invece vorrei fare un'altra classe che, una volta premuto il tasto, mi richiami quetsa classe...vorrei fare questo perchè dovrò aprire molti frame e nn mi va di riscrivere il codice nella classe principale..
quindi ricapitolando premo un bottone che mi chiama una classe che ha le impostazione generali di un fremo...
la domanda è...come faccio da un addActionListener richiame questa classe?


ti ringrazio... :yuppi: :yuppi: :yuppi:

perzem
12-06-2006, 13:03
nella classe dove hai il bottone crei un'istanza dell'altra classe

nomeclasse c=new costruttoreclasse(eventuali parametri);
poi nel listener farai c.show()

Matteo982
14-06-2006, 10:41
Il concetto è giusto ma bisogna usare il metoto


c.setVisible(true);

Per chè show() è stato "tolto" nelle nuove versioni di java...

Ciao. :ciauz:

gax80
14-06-2006, 11:23
ok grazie tante

Divinity.God
17-06-2006, 15:22
Il mio è un problema + sottile. Probabilmente basterà il classico uovo di colombo..
Ho la suddetta classe swing che implementa solamente JFrame


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

public class JButtonExample extends JFrame {
/**
*
*/
private static final long serialVersionUID = -9047187471312379634L;
private JDialog dialog;
private JButton okButton;
private JButton jDialogButton;

public JButtonExample() {
// Top Level Container
super("JButtonExample");
setBounds(10,35,200,70);
getContentPane().setLayout(new FlowLayout(FlowLayout.CENTER));

// Finestra di Dialogo inizialmente invisibile
dialog = new JDialog(this,"JDialog",false);
dialog.setBounds(250,20,300,100);
dialog.getContentPane().setLayout(new BorderLayout());
dialog.getContentPane().add(BorderLayout.CENTER, new JLabel("Chiudi questa Finestra per continuare",JLabel.CENTER));
dialog.setDefaultCloseOperation(JFrame.HIDE_ON_CLO SE);

// Crazione Pulsanti
okButton = new JButton("OK");
jDialogButton = new JButton("Open Frame");
// Crea Ascoltatori (oberservers)
ActionListener okListener = new OkButtonListener();
ActionListener openActionListener = new JDialogButtonListener();
// Registra gli ascoltatori verso i pulsanti
okButton.addActionListener(okListener);
jDialogButton.addActionListener(openActionListener );
// OkButton come default Button
getRootPane().setDefaultButton(okButton);
//Aggiunge i pulsanti al top level Container
getContentPane().add(okButton);
getContentPane().add(jDialogButton);

setVisible(true);
}
}


Devo richiamare in JDialogButtonListener (ovviamente altra classe che vi riporterò sotto) il metodo setVisible su dialog (JDialog inizialmente invisibile dichiarata nella classe qui sopra.
Questo è JDialogButtonListener:


import java.awt.event.*;

public class JDialogButtonListener implements ActionListener {
public void actionPerformed(ActionEvent e){
dialog.setVisibile(true);
}
}


Eclipse ovviamente mi dice che dialog non è risolvibile (è private e non passo alcun parametro, in quanto non si può, a JDialogButtonListener).....
Come posso risolvere? Fin'ora ho trovato solo esempi che estendevano una swing ma che nel contempo implementavano Actionlistener, quindi il metodo actionPerformed essendo interno alla classe trova per forza tutti gli elementi.
Spero di essere stato chiaro..e grazie in anticipo a tutti.

:ciauz:

Matteo982
17-06-2006, 17:39
Puoi implementare la seconda classe all'interno dell'altra come una classe annidata...in questo modo non dovresti più avere il problema.


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

public class JButtonExample extends JFrame {
/**
*
*/
private static final long serialVersionUID = -9047187471312379634L;
private JDialog dialog;
private JButton okButton;
private JButton jDialogButton;

public JButtonExample() {
// Top Level Container
super("JButtonExample");
setBounds(10,35,200,70);
getContentPane().setLayout(new FlowLayout(FlowLayout.CENTER));

// Finestra di Dialogo inizialmente invisibile
dialog = new JDialog(this,"JDialog",false);
dialog.setBounds(250,20,300,100);
dialog.getContentPane().setLayout(new BorderLayout());
dialog.getContentPane().add(BorderLayout.CENTER, new JLabel("Chiudi questa Finestra per continuare",JLabel.CENTER));
dialog.setDefaultCloseOperation(JFrame.HIDE_ON_CLO SE);

// Crazione Pulsanti
okButton = new JButton("OK");
jDialogButton = new JButton("Open Frame");
// Crea Ascoltatori (oberservers)
ActionListener okListener = new OkButtonListener();
ActionListener openActionListener = new JDialogButtonListener();
// Registra gli ascoltatori verso i pulsanti
okButton.addActionListener(okListener);
jDialogButton.addActionListener(openActionListener );
// OkButton come default Button
getRootPane().setDefaultButton(okButton);
//Aggiunge i pulsanti al top level Container
getContentPane().add(okButton);
getContentPane().add(jDialogButton);

setVisible(true);
}
public class JDialogButtonListener implements ActionListener {
public void actionPerformed(ActionEvent e){
dialog.setVisibile(true);
}
}
}

Ciao. :ciauz:

Divinity.God
18-06-2006, 11:57
A questi punti direi che è anche l'unica.
Per come è strutturata l'interfaccia ActionListener direi che non si può creare una sua implementazione in una classe a se stante, se questa ha come action una azione su un oggetto esterno.

Loading