Calcolatrice

Fab996
Vorrei chiedere se qualcuno potesse dare un'occhiata al mio codice e dirmi cosa potrei migliorare, per ora ho fatto il layout
import javax.swing.*;
import java.awt.*;
class Calcolatrice extends JFrame {
	//costruttore
	public Calcolatrice() {
		super(); //invoca costruttore di JFrame
		setTitle("Calcolatrice");
		setSize(300,300);
		setMinimumSize(new Dimension(300,300));
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setResizable(true);
		inizializzaGUI();
		setVisible(true);
	}
	public void inizializzaGUI() {
		JPanel intermedio; //pannello intermedio-principale
		JPanel tasti; //pannello secondario per i tasti
		JPanel cancella; //pannello secondario per cancellare
		JLabel etichetta;
		JButton cancellaC; //C
		JButton cancellaCE; //CE
		JButton zero,uno,due,tre,quattro,cinque,sei,sette,otto,nove,div,molt,som,sotr,virgola,segno,uguale,radice,percent;
		JButton definire; //pulsante da definire;
		// costruzione dei tre pannelli col rispettivo layout
		tasti = new JPanel();
		tasti.setLayout(new GridLayout(4,5));
		intermedio = new JPanel();
		intermedio.setLayout(new GridLayout(3,1));
		cancella = new JPanel();
		cancella.setLayout(new GridLayout(1,2));
		etichetta = new JLabel("0");
		//assegnazione di tutti i bottoni ed etichetta
		cancellaC = new JButton("C");
		cancellaCE = new JButton("CE");
		zero = new JButton("0");
		uno = new JButton("1");
		due = new JButton("2");	
		tre = new JButton("3");
		quattro = new JButton("4");
		cinque = new JButton("5");
		sei = new JButton("6");
		sette = new JButton("7");
		otto = new JButton("8");
		nove = new JButton("9");
		div = new JButton("/");
		molt = new JButton("*");
		som = new JButton("+");
		sotr = new JButton("-");
		virgola = new JButton(",");
		segno = new JButton("+/-");
		uguale = new JButton("=");
		radice = new JButton("sqrt");
		percent = new JButton("%");
		definire = new JButton("1/x");
		//aggiunta Component(atomici) ai vari pannelli
		cancella.add(cancellaCE);
		cancella.add(cancellaC);
		tasti.add(sette);
		tasti.add(otto);
		tasti.add(nove);
		tasti.add(div);
		tasti.add(radice);
		tasti.add(quattro);
		tasti.add(cinque);
		tasti.add(sei);
		tasti.add(molt);
		tasti.add(percent);
		tasti.add(uno);
		tasti.add(due);
		tasti.add(tre);
		tasti.add(sotr);
		tasti.add(definire);
		tasti.add(zero);
		tasti.add(segno);
		tasti.add(virgola);
		tasti.add(som);
		tasti.add(uguale);
		//aggiunta dei vari pannelli al pannello principale(Intermedio)
		intermedio.add(etichetta);
		intermedio.add(cancella);
		intermedio.add(tasti);
		//aggiunta pannelo principale(Intermedio) al Frame
		getContentPane().add(intermedio);
	}
	public static void main(String[] args) {
		new Calcolatrice();
	}
}

Risposte
apatriarca
È senza dubbio ad esempio possibile creare i tasti dei numeri con un ciclo, ma direi che va bene. La parte difficile viene in effetti adesso con l'aggiunta della gestione degli eventi.

Fab996
"apatriarca":
La parte difficile viene in effetti adesso con l'aggiunta della gestione degli eventi.

Si, gli eventi ancora devo studiarli. Più che altro mi piacerebbe che la calcolatrice avesse un layout come quello che ti allego, ossia con i tasti $CE-C$ e l'etichetta più sottili. Inoltre non capisco perché alcuni esempio che vedo mettono JButton, JLabel come variabili di istanza, ossia fuori dalla classe, e il metodo getcontentpane() lo mettono nel costruttore, mentre io l'ho messo alla fine di tutto, e magari creano anche più getcontentpane()...

apatriarca
Ci sono molti modi di farlo e non c'è un modo necessariamente migliore degli altri. Per la gestione degli eventi era una volta spesso comodo avere i tuoi pulsanti come campi della classe, ma certamente non è necessario. Proseguendo nella implementazione delle funzionalità della calcolatrice potresti decidere di cambiare qualcosa, ma non guardare gli altri pensando che sia IL metodo corretto. È solo uno dei tanti modi di implementare quella cosa e il tuo metodo non è necessariamente migliore o peggiore, solo diverso.

Fab996
"apatriarca":
creare i tasti con un ciglo.

Ti ringrazio, ma mettere i vari JLabel e JButton e tutti gli altri componenti come variabili di classe che vantaggi potrebbe darmi?
E poi non capisco perchè bisogna fare tutta questa "fatica" poichè ho visto che in eclipse c'è un plugin che semplifica notevolmente la grafica. Poi non riesco sinceramente a creare i tasti col ciclo
for(int i=0; i<=22; i++)
a = new JButton()

Dato che ogni volta l'argomento di JButton varia (tipo una volta devo mettere 1 poi 5 ecc) come faccio ?

apatriarca
Quei plugin non fanno altro che generare automaticamente la tua classe.

EDIT: Per quanto riguarda i JButton in un ciclo. Basta avere un array e usare il contatore per generare le stringhe.

Fab996
"apatriarca":

EDIT: Per quanto riguarda i JButton in un ciclo. Basta avere un array e usare il contatore per generare le stringhe.

Mh ma avrei bisogno comunque di 22 stringhe, intendi qualcosa di questo tipo
JButton[] = new JButton[22];
for (int i=0; i<=22; i++)
String zero = "0";
String uno = "1";
String radice = "sqrt"

Ecc.. perchè leggendo i valori così devo per forza usare 22 stringhe...

apatriarca
Parlo dei soli valori da "0" a "9".. Gli altri li devi per forza creare uno per uno (a meno di farti un array di liste e usare quelle..).

Fab996
Grazie:)

apatriarca
Ma questa è la parte facile, praticamente meccanica, e che normalmente viene generata dall'IDE.. Inizia a fare il resto.

Fab996
"apatriarca":
Ma questa è la parte facile, praticamente meccanica, e che normalmente viene generata dall'IDE.. Inizia a fare il resto.

In che senso dall'IDE, attraverso quei plugin di Eclipse tipo? Perchè io ho sempre usato Gedit/Pluma come editor. Si, ho letto che gli eventi sono abbastanza complicati, infatti vorrei comprare un buon libro dato che ad un corso universitario di primo anno questi argomenti non vengono affrontati...

apatriarca
Perché non sono argomenti di un corso universitario del primo anno. Ha senso iniziare ad affrontare le GUI solo dopo che si è imparato ad usare bene Java (o comunque il linguaggio scelto). Alcuni IDE come Eclipse o NetBeans permettono di creare interfacce grafiche in modo visuale.

Fab996
"apatriarca":
Perché non sono argomenti di un corso universitario del primo anno. Ha senso iniziare ad affrontare le GUI solo dopo che si è imparato ad usare bene Java (o comunque il linguaggio scelto). Alcuni IDE come Eclipse o NetBeans permettono di creare interfacce grafiche in modo visuale.

Grazie per la spiegazione, è che ora che è finito l'anno accademico volevo imparare qualcosa di nuovo :-D

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.