|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: Jun 2008
Messaggi: 42
|
[Java] creare pulsanti
Ho un problema von java: non riesco a creare i pulsanti. Vorrei poterci scrivere dentro un testo ed associarci delle funzioni create da me (possibilmente usando lo statement if).
|
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Suppongo tu stia usando Swing e non solo AWT puro: in tal caso guarda qua, c'è proprio la base per usare i JButton.
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
![]() |
![]() |
![]() |
#3 |
Member
Iscritto dal: Jun 2008
Messaggi: 42
|
Mi hai dato il link ad un file del pc (che io probabilmente nn ho oppure ho in un'altra dyrectory). Se ti ricordi dove l'hai preso manda il link alla pagina intrnet
|
![]() |
![]() |
![]() |
#4 | |
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Uuuups, sorry
![]() Ecco qua: How to use buttons... direttamente da The Java Tutorials della Sun. In particolare per fare questo: Quote:
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
![]() |
![]() |
![]() |
#5 | |
Member
Iscritto dal: Jun 2008
Messaggi: 42
|
Quote:
|
|
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
tipo una cosa del genere:
Codice:
public class MyButton extends javax.swing.JButton { // a questo punto hai una classe che estendendo JButton è un JButton // qui dentro aggiungerai le tue variabili // e i tuoi metodi } Codice:
public class MyFrame extends javax.swing.JFrame { // membri di MyFrame // bla bla bla... // metodi di MyFrame // bla bla bla... // entry point dell'applicazione public static void main(String argv[]) { MyFrame frame = new MyFrame("Titolo della finestra"); frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSING); // eccetera eccetera... le solite cose insomma // costruiamo e aggiungiamo un bottone al frame: MyButton button1 = new MyButton(); frame.add(button1); // ... } } Forse è meglio se cerchi di spiegarci: 1] Dove devi mettere il bottone; 2] Che cosa deve fare il bottone. Inoltre: che strumenti di sviluppo usi? Usi un IDE come NetBeans o Eclipse?
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
![]() |
![]() |
![]() |
#7 | |
Member
Iscritto dal: Jun 2008
Messaggi: 42
|
Quote:
I pulsanti dovrebbero essere 2, e posizionati sotto al testo gia presente (allineati a sinistra). Nel codice sono gia presenti degli int. Il primo (chiamiamolo number1) viene generato tramite random number con lo statement "Do while" finchè non supera un certo numero (il primo random number che lo compone si chiama num1) . Per l'altro (chiamiamoli num2, num3,num4...) ho generato dieci random number e 9 int, che sono rappresentati il primo dalla somma dei primi due random number, e gli altri dalla somma del precedente + il random number successivo. Il testo scrive i due numeri e chiede cosa si vuole fare. Io vorrei che premendo un pulsante si faccia qualcosa del tipo: Codice:
if (number1 > 21) { out.println("Hai vinto!); } else if (number1 < 21 && num2 > number1) { // Al posto di num2 ci può essere qualunque numero raggiunto col pulsante successivo out.println("Hai vinto!"); } else if (number1 < 21 && num2 < number1) { out.println("Mi spiace, hai perso"); } Codice:
//Al posto di num3 ci può essere qualsiasi numero successivo a quello gia raggiunto if (num3 > 21) { out.println("Mi spiace, hai perso"); } else if (num3 == 21) { out.println("Hai vinto!"); } else if (num3 < 21) { //Qui va messa di nuovo la richiesta ed il codice dei pulsanti } Non riesco a capire come non far partire il programma in console, netbeans in automatico genera tre files, uno in cui va inserito il codice, e gli altri in cui va modificata l'intrfaccia, io modifico quello in cui devo inserire il codice, ma poi mi fa partire quel file in console, e la parte grafica in finestra (su new project ho selezionato java desktop application, perchè se selezionavo java application e basta, mi generava un solo file, ma non riuscivo a fare gli import). |
|
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Mmm, francamente penso che prima di imbarcarti nell'implementazione del programma (qualsiasi cosa faccia, anche se è semplicissimo) sarebbe meglio se provassi a seguire un tutorial di base per la creazione di una applicazione grafica.
Visto che usi NetBeans, niente di meglio che questo link (in inglese): The Java Tutorials Trail: Creating a GUI with JFC/Swing In particolare ti consiglio di leggere i primi due "capitoli" che trovi nella pagina, quelli intitolati: 1 - Getting Started with Swing 2 - Learning Swing with the NetBeans IDE A quel punto potresti consultare il capitolo: 3 - Using Swing Components per informazioni più specifiche circa i componenti che usi nel tuo programma (ad esempio il JButton) Si tratta di dedicare una manciata di ore alla cosa, con calma, in cambio otterresti chiarezza e un buon punto di inizio per continuare a esercitarti, e finire il tuo programma, sospetto, con semplicità.
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) Ultima modifica di banryu79 : 24-07-2008 alle 08:34. |
![]() |
![]() |
![]() |
#9 | |
Member
Iscritto dal: Jun 2008
Messaggi: 42
|
Quote:
|
|
![]() |
![]() |
![]() |
#10 | |
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Quote:
![]() Comunque, sul sito "juva.sun.com" trovi tantissima documentazione: se impari a usarlo bene può aiutarti non poco nella comprensione. Inoltre, se affronti Java da cmq poco tempo, prova a trovarti un buon manuale sul linguaggio: in questo modo sarai guidato e imparerai più agevolmente. Due manuali in italiano : Java Mattone dopo Mattone Object Oriented && Java 5
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
![]() |
![]() |
![]() |
#11 | |
Member
Iscritto dal: Jun 2008
Messaggi: 42
|
Quote:
|
|
![]() |
![]() |
![]() |
#12 |
Member
Iscritto dal: Jun 2008
Messaggi: 42
|
Gia che ci sono metto anche il link all'indice completo del tutorial di sun.
|
![]() |
![]() |
![]() |
#13 |
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Ottima risorsa, già che ci sono includo pure il link diretto alla pagina del Sun Developer Network da dove si può scaricare tutto il tutorial (circa 34 MB)
Java SE Tutorial
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
![]() |
![]() |
![]() |
#14 |
Member
Iscritto dal: Jun 2008
Messaggi: 42
|
Ho guardato un po' quella guida, e sono riuscito a fare i pulsanti.
Poi ho cancellato quell' inutile proggetto, ed ho ripreso col mio proggetto iniziale. Però non riuscivo più ad usare gli actionlistener. In pratica con questo codice Codice:
package prove; import java.awt.event.ActionListener; public class Main implements ActionListener { ... } public static void main(String[] args) { ... } ![]() Sulle possibili soluzioni trovo solo "Implement all abstract methods" , e se lo clicco mi aggiunge questo codice: Codice:
public void actionPerformed(ActionEvent e) { throw new UnsupportedOperationException("Not supported yet."); } |
![]() |
![]() |
![]() |
#15 | ||
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Quote:
Supponiamo che nella classe Main sia definito il tuo JButton da qualche parte, facciamo finta si chiami "myButton". Supponiamo anche che la classe Main sia il JFrame dell'applicazione Ora devi: 1] registrare l'ActionListener al tuo bottone Codice:
... JButton myButton = new JButton(); myButton.addActionListener(this); // passo 'this' come ActionListener del bottone perchè suppongo che siamo // nella classe Main la quale, estendendo ActionListener, è il Listener per il // bottone: la classe Main deve quindi implementare il metodo astratto // public void actionPerformed(ActionEvent e){} dichiarato da ActionListener. ... Codice:
public void actionPerformed(ActionEvent e) { System.out.println("Bottone premuto!"); // questo fa comparire una finestra di popup: javax.swing.JOptionPane.showMessageDialog(this, "Bottone premuto!", "Action del bottone", JOptionPane.INFORMATION_MESSAGE); } Per concludere ti spiego questo: Quote:
Succede che l'IDE si accorge che la tua classe Main sta estendendo la classe ActionListener. La classe ActionListener è astratta: questo significa che non può essere istanziata (infatti serve solo come meccanismo di estensione da parte di altre classi) e che obbliga la classe che la estende a implementare tutti i suoi metodi astratti. Ora, la classe ActionListener dichiara solo un unico metodo astratto: "public void actionPerformed(ActionEvent e)". NetBeans ti da quindi un errore perchè devi implementare tale metodo. Cliccando sull'icona di aiuto accanto alla riga di codice dove l'IDE ti segnala l'errore compaiono come hai visto sia la causa di quell'errore che la possibile soluzione che l'IDE ti propone e, se vuoi, adotta per te in maniera automatica. Così facendo ci pensa NetBeans a inserire il codice che implementa "actionPerformed()" però l'IDE non può sapere che azione vuoi eseguire quando viene attivato il bottone: ecco perchè nel corpo del metodo si limita a lanciare una UnsupportedOperationException: per segnalare che l'azione non è ancora supportata. Sei tu che devi cancellare il lancio di quell'eccezione inserendo il codice che tu vuoi si esegua e che rappresenta l'azione del bottone.
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) Ultima modifica di banryu79 : 25-07-2008 alle 11:53. |
||
![]() |
![]() |
![]() |
#16 |
Member
Iscritto dal: Jun 2008
Messaggi: 42
|
Grazie ai tuoi consigli ce l'ho quasi fatta
![]() Ma avrei ancora 3 domando (per ora): 1] Si può creare un pulsante che faccia ripartire l'applicazione? 2] Si può creare un pulsante che chiuda l'applicazione? 3] Come si mettono gli Swing Components nello stile di windows (guida java alla pagina Swing Components>Windows Look and Feel)? |
![]() |
![]() |
![]() |
#17 | ||
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Quote:
Non penso che tu voglia chiuderla del tutto (ovvero terminare il processo) e poi rilanciarlo. Suppongo tu voglia solamente reinizializzare dei dati e alcuni componenti grafici, è così? Se la mia ipotesi è corretta quello che devi fare è definire l'action del bottone in modo opportuno, il che implica chiamare del codice che faccia il lavoro che ho descritto. Reinizializzare le strutture dati dovrebbe essere semplice, dipende come sono definite e come vengono usate. Reinizializzare i componenti grafici è possibile, ma qui ti occorrono maggiori conoscenze dei vari componenti che usi e del modo in cui funziona Swing. Certo. E' sufficente inserire nel corpo del metodo actionPerformed() del suo ActionListener una cosa del tipo: Codice:
// facciamo finta che "myFrame" sia una reference del JFrame della tua // applicazione // chimando dispose() si rilasciano le risorse native usate da questo // componente e da tutti i suoi sotto componenti. myFrame.dispose(); // questa chiamata termina la Virtual Machine corrente. System.exit(0); Quote:
Facciamo anche finta che questa classe sia la classe Main, e che basti chiamare il suo costruttore per inizializzare tutte le componenti grafiche. Normalmente per avviare l'applicazione si fa una cosa del tipo: Codice:
public static void main(String[] argv) { Main main = new Main(); main.setVisible(true); } Codice:
public static void main(String[] argv) { java.awt.EventQueue.invokeLater( new Runnable() { public void run() { Main main = new Main(); main.setVisible(true); } } ); } In entrambi i casi, è possibile settare il Look&Feel dell'applicazione grafica in modo che Swing venga eseguito, per esempio, con il Look&Feel del sistema operativo su cui sta girando (ci sono anche altre opzioni per simulare il Look&Feel di un sistema operativo diverso da quello su cui ci si trova o adirittura usare Look&Feel non di sistema, in rete ce ne sono tanti di vario tipo). Basta dire a Swing che si vuole usare il Look&Feel di sistema (e non quello orrido di default ![]() Codice:
public static void main(String[] argv) { try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (Exception e) { System.err.println( "Errore di creazione Look&Feel" ); } java.awt.EventQueue.invokeLater( new Runnable() { public void run() { Main main = new Main(); main.setVisible(true); } } ); } Ciao ![]()
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) Ultima modifica di banryu79 : 25-07-2008 alle 12:25. |
||
![]() |
![]() |
![]() |
#18 |
Senior Member
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
|
|
![]() |
![]() |
![]() |
#19 | |
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Quote:
![]() Altro che idolo, io personalmente mi sento una caccoletta. ![]() [Comunque felice di poter aiutare chi inizia]
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 17:27.