Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2010
    Messaggi
    5

    GUI semplice: la shell in una finestra

    Ciao, esordisco con una domanda.

    Studio Java al liceo, in Svizzera. Assieme ad un paio di amici abbiamo scritto una calcolatrice (25 funzioni), ma ha il limite di lavorare soltanto in terminale.

    Per scrivere e compilare usiamo NetBeans 6.9, così pian piano m'è venuta voglia di realizzare una semplice interfaccia che permettesse l'esecuzione in finestra della calcolatrice.
    L'obiettivo è un eseguibile che abbia una finestra nella quale passi il terminale dell'applicazione.

    A dire il vero, sono partito con un'idea elaborata. Tuttavia, non sono riuscito ad adattare le istruzioni del tutorial su Swing per l'interfaccia che intendevo sviluppare (abbiamo tre input ed un output, mentre il tutorial ha un input ed un output).

    Grazie per eventuali dritte, buona serata a tutti!

    Isaac

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    proposta di codice? e poi che vuole dire cambia il numero di input e non riesco a farlo?
    posta un po di codice e si vede

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2004
    Messaggi
    20
    normalmente le applicazioni sono fatte così
    esecutore <-> controller <-> gui
    voi in pratica avete già l'esecutore, dovete modificarlo un poco. In pratica anzichè scrivere e leggere direttamente da terminale, lo fate su una classe che in questo schema è il controller. Poi sarà il controller a comunicare con gui o seriale o quant'altro vi passi per la testa

  4. #4
    Utente di HTML.it
    Registrato dal
    Nov 2010
    Messaggi
    5
    Ciao, ringrazio per le vostre risposte: gentili!

    In base a quanto ho letto, posto la struttura della ShellCalc: forse è più eloquente che una lunga descrizione in italiano.

    All'inizio ho piazzato:
    codice:
    import java.util.Scanner;
    public class ShellCalc {
                public static void main(String[] args) {
                           Scanner input = new Scanner(System.in);
    In seguito, abbiamo il titolo e la lista delle 25 operazioni. Si tratta di una sequela di
    codice:
    System.out.println("...");
    Dopo, l'utente sceglie l'operatore digitandone il numero corrispondente:
    codice:
    System.out.print("Scegliere l'operatore: ");
    int operatore = input.nextInt();
    System.out.println();
    In seguito definiamo le diverse variabili:
    codice:
    double n = 0.0;
    double risultato = 0.0;
    int gradi = 0;
    double pw = 0.0;
    int primi = 0;
    double secondi = 0.0;
    
    double a = 0.0;
    double b = 0.0;
    double c = 0.0;
    Per poi passare alle richieste dei fattori. Per alcune operazioni, infatti, è necessaria una sola richiesta, in altri casi due (la maggiorparte) o tre (gradi sessagesimali).
    Ecco il codice:
    codice:
    if (operatore == 23) {
                System.out.print("[gradi]    ");
                gradi = input.nextInt();
    
                System.out.print("[primi]    ");
                primi = input.nextInt();
    
                System.out.print("[secondi]   ");
                secondi = input.nextDouble();
    
    } else if (operatore == 24) { 
                System.out.print("[gradi]  ");
                gradi = input.nextInt();
    
                System.out.print("[primi]  ");
                primi = input.nextInt();
    
                System.out.print("[secondi]  ");
                secondi = input.nextDouble();
    
    } else if (operatore == 25) {
                System.out.println("Digitare il primo coefficiente: ");
                a = input.nextDouble();
                System.out.println("Digitare il secondo coefficiente: ");
                b = input.nextDouble();
                System.out.println("Digitare il terzo coefficiente: ");
                c = input.nextDouble();
    
            } else {
                System.out.print("Digitare un numero: ");
                n = input.nextDouble();
            }
    A questo punto, la sezione di elaborazione dei calcoli.

    codice:
    System.out.println();
    
            switch (operatore) {
    
                case 1:
                    System.out.print("Digitare un numero: ");
    
                    double m = input.nextDouble();
                    double r = n + m;
    
                    System.out.println();
                    System.out.println("Risultato: " + r);
    
                    break;
    
                case 2:
                    System.out.print("Digitare un numero: ");
    
                    m = input.nextDouble();
                    r = n - m;
    
                    System.out.println();
                    System.out.println("Risultato: " + r);
    
                    break;
    
                case 3:
                    System.out.print("Digitare un numero: ");
    
                    m = input.nextDouble();
                    r = n / m;
    
                    System.out.println();
                    System.out.println("Risultato: " + r);
    
                    break;
    
                case 4:
                    System.out.print("Digitare un numero: ");
    
                    m = input.nextDouble();
                    r = n * m;
    
                    System.out.println();
                    System.out.println("Risultato: " + r);
    
                    break;
    
                case 5:
                    System.out.print("Digitare un numero: ");
    
                    m = input.nextDouble();
                    r = java.lang.Math.pow(n, m);
    
                    System.out.println("Risultato: " + r);
    
                    break;
    
                case 6:
                    r = java.lang.Math.sqrt(n);
    
                    System.out.println();
                    System.out.println("Risultato: " + r);
    
                    break;
    
                case 7:
                    r = java.lang.Math.exp(n);
    
                    System.out.println();
                    System.out.println("Risultato: " + r);
    
                    break;
    
                case 8:
                    r = java.lang.Math.log(n);
    
                    System.out.println();
                    System.out.println("Risultato: " + r);
    
                    break;
    
                case 9:
                    System.out.print("Digitare la base del logaritmo: ");
    
                    m = input.nextDouble();
                    r = java.lang.Math.log(n) / java.lang.Math.log(m);
    
                    System.out.println();
                    System.out.println("Risultato: " + r);
    
                    break;
    
                case 10:
                    System.out.print("Digitare un numero: ");
    
                    m = input.nextDouble();
                    r = n % m;
    
                    System.out.println();
                    System.out.println("Classe di resto del " + r);
    
                    break;
    
                case 11:
                    r = java.lang.Math.toRadians(n);
    
                    System.out.println();
                    System.out.println("Radianti: " + r);
    
                    break;
    
                case 12:
                    r = java.lang.Math.toDegrees(n);
    
                    System.out.println();
                    System.out.println("Gradi: " + r);
    
                    break;
    
                case 13:
                    r = java.lang.Math.sin(n);
    
                    System.out.println();
                    System.out.println("sin = " + r);
    
                    break;
    
                case 14:
                    r = java.lang.Math.asin(n);
    
                    System.out.println();
                    System.out.println("arcsin = " + r);
    
                    break;
    
                case 15:
                    r = java.lang.Math.cos(n);
    
                    System.out.println();
                    System.out.println("cos = " + r);
    
                    break;
    
                case 16:
                    r = java.lang.Math.acos(n);
    
                    System.out.println();
                    System.out.println("arccos = " + r);
    
                    break;
    
                case 17:
                    r = java.lang.Math.tan(n);
    
                    System.out.println();
                    System.out.println("tan = " + r);
    
                    break;
    
                case 18:
                    r = java.lang.Math.atan(n);
    
                    System.out.println();
                    System.out.println("arctan = " + r);
    
                    break;
    
                case 19:
                    risultato = 180 / Math.PI * n;
    
                    gradi = (int) risultato;
    
                    pw = (risultato - gradi) * 60;
    
                    primi = (int) pw;
    
                    secondi = (pw - primi) * 60;
                    int secondip = (int) secondi;
    
                    System.out.println(n + " radianti equivalgono a " + gradi + "° " + primi + "' " + secondip + "''");
    
                    break;
    
                case 20:
                    risultato = 50 / Math.PI * n;
    
                    System.out.println(n + " radianti equivalgono a " + risultato + "°");
    
                    break;
    
                case 21:
                    risultato = Math.PI / 50 * n;
    
                    System.out.println(n + " gradi sessadecimali equivalgono a " + risultato + " radianti");
    
                    break;
    
                case 22:
                    risultato = n * 360 / 100;
    
                    gradi = (int) risultato;
    
                    pw = (risultato - gradi) * 60;
                    primi = (int) pw;
    
                    secondi = pw - primi;
                    secondip = (int) secondi;
    
                    System.out.println(n + " radianti equivalgono a " + gradi + "° " + primi + "' " + secondip + "''");
    
                    break;
    
                case 23:
                    risultato = (gradi / 360) * 2 * Math.PI + (primi / 21600) * Math.PI + (secondi / 1296000) * Math.PI;
                    System.out.println();
                    System.out.println(gradi + "° " + primi + "' " + secondi + "'' equivalgono a " + risultato + " radianti");
    
                    break;
    
                case 24:
                    risultato = gradi * 100 / 360 + primi * 100 / 21600 + secondi * 100 / 1296000;
                    System.out.println();
                    System.out.println(gradi + "° " + primi + "' " + secondi + "'' equivalgono a " + risultato + "°");
    
                    break;
    
                case 25:
                    double delta = java.lang.Math.sqrt(java.lang.Math.pow(b, 2)) - 4 * a * c;
    
                    if (delta > 0) {
                        double x = (-b + (java.lang.Math.sqrt(java.lang.Math.pow(b, 2)) - 4 * a * c)) / 2 * a;
                        double y = (-b - (java.lang.Math.sqrt(java.lang.Math.pow(b, 2)) - 4 * a * c)) / 2 * a;
    
                        System.out.println("Prima soluzione: " + x);
                        System.out.println("Seconda soluzione: " + y);
                    } else if (delta == 0) {
                        double x = (-b + (java.lang.Math.sqrt(java.lang.Math.pow(b, 2)) - 4 * a * c)) / 2 * a;
                        System.out.println("Prima ed unica soluzione: " + x);
                    } else if (delta < 0) {
                        System.out.println("L'equazione non ha soluzioni reali.");
                    }
    
                    break;
    
                default:
                    System.out.println("Operazione non riconosciuta.");
    
                    break;
    Seguono scritte finali e graffe di chiusura.

    Ora, in realtà mi rendo conto che il codice non risponda proprio del tutto a dei criteri di formattazione, e magari ci sono dei modi più essenziali per realizzare le operazioni che noi abbiamo programmato prendendo strade più complesse (in tal caso vi chiedo se fosse possibile farmelo notare: sono sempre contento di imparare).

    Per quanto riguarda la domanda iniziale, ci sono molte possibilità:
    - semplice finestra che riproduca il terminale;
    - campo di testo per l'operatore e per i fattori, con relativo tasto corrispondente a "Enter";
    - campo di testo per gli operatori e menù a tendina per scegliere le operazioni;
    - ...

    Per iniziare pensavo ad un lavoro semplice, la prima possibilità, anche se poi ovviamente mi piacerebbe fare copie del codice ed adattarlo a GUI sempre più evolute.

    Nota: questo lavoro non è un compito scolastico, si tratta di un approfondimento personale di tre pistola che si stanno intrippando di Java (la studiamo da tre mesi).

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    consiglio ai 3 pistola di continuare a guardare il tutorial di netbeans!!!
    Allora ragazzi guardate anche qui

    http://download.oracle.com/javase/tu...nts/index.html

    alcune cose possono sembrare ostiche all'inizio, ma è questione di abitudine.
    Lascerei perdere per adesso una shell che simula la riga di comando, è più semplice che creiate visivamente un agglomerato di bottoni:
    ogni bottone rappresenta un numero e/o un'operazione mentre il textfield prende il valore che via via digitate.
    Provate a fare da soli una mascherina che prende le 10 cifre e le operazioni, tutorial sun e la guida che vi ho dato dovrebbero bastarvi per iniziare. Poi se avete pazienza si passa oltre

  6. #6
    Utente di HTML.it
    Registrato dal
    Nov 2010
    Messaggi
    5
    Ciao, ti ringrazio per la risposta!

    Se ho capito bene...

    - 25 bottoni per le diverse operazioni

    - 10 bottoni per le 10 cifre

    - un "uguale" per il calcolo finale

    Quindi... la variabile "operatore", anziché ricevere l'input da tastiera, deve "ascoltare" i bottoni, ad ognuno dei quali corrisponde quindi un numero da 1 a 25.
    Invece le variabili dei "fattori" devono assumere un valore digitato dai bottoni per le cifre, mentre il bottone "uguale" fa quello che nella shell fa l'Enter.

    Ho capito bene?

    Questo per le linee generali, poi chiaramente seguo umilmente i consigli e mi leggo pian piano la documentazione... però è innegabile che un supporto più "dinamico" sul forum sia piuttosto efficace, in poco tempo già alcune cose sono più chiare.

    In generale che ne pensate del codice che ho pubblicato? Siamo sulla buona strada od abbiamo fatto cose inutili, ridondanti o disordinate?

    Grazie a tutti, buona serata!


  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    ni
    non complicarti subito la vita che non è facile specie per dei newbie.
    Fai prima bene le operazioni fondamentali (+, -, *,/), poi aggiungi le altre.
    Le hai già implementate, basta adattarle nel modo giusto ad un sistema grafico.
    Poi la textfield non sta in ascolto dei bottoni (e già sbagli), ma è un actionlistener associato al bottone a cambiare il valore al componente testuale.

    Questo per le linee generali, poi chiaramente seguo umilmente i consigli e mi leggo pian piano la documentazione... però è innegabile che un supporto più "dinamico" sul forum sia piuttosto efficace, in poco tempo già alcune cose sono più chiare
    non scambiare la gentilezza per efficacia, il metodo migliore resta sempre e comunque la consultazione della documentazione (oltretutto quella java è tutta online). Qui ci sta gente che come me si è spulciata manuali cartacei per trovare quello che gli serviva e sentire il pischello di turno che preferisce chiedere nel forum, dove per ovvi motivi la risposta è sintetica, anziché leggere la documentazione e/o un libro di testo dà molto fastidio.
    Niente è facile nella vita, nemmeno programmare (a dispetto di quanti molti possano pensare). Premio l'impegno che state mettendo nel considerare il progetto e nel voler andare avanti, vi suggerisco come fare (come è più semplice senza crearvi casini visto che siete alle prime armi), ma il forum (e lo dice anche il regolamento) non sostituisce API e/o libri di testo (tutorial sono utili ma fino ad un certo punto).

    Riguardo al codice: non emetto giudizi perché andrei a dirti qualcosa che riguarda molto il mio modo di lavorare (improntato su principi che vedi nel corso degli studi), quello che hai fatto per me può essere sbagliato, per altri no. Oltretutto non sono la tua insegnante, quindi a parte lo sfogo di poco fa tengo le mie opinioni per me.

  8. #8
    Utente di HTML.it
    Registrato dal
    Nov 2010
    Messaggi
    5
    Credo di aver capito che intendi e sono d'accordo, è un fatto del quale sia io sia i miei amici ci siamo resi conto ancor prima dell'inizio dei corsi, che tra l'altro sono opzionali, per cui dietro c'è un interesse vero, e non per farsi fighi a saper programmare ma per cercare di combinare assieme diversi tipi di pensiero e far qualcosa di interessante con 'sti benedetti computer.
    Siccome i corsi sono opzionali, però, non c'è troppo tempo per leggere paginate, anche se la voglia di approfondire andando oltre il compitino c'è e sono soldi nostri quelli spesi per comprarci un manuale in forma di libro.
    Perciò ho pensato di avviare una discussione qui e, questo me lo concedo, visto che sono preciso e un po' nevrotico, sicuramente proseguirò nella lettura dei tutorial e nella documentazione, nonché del libro recentemente acquistato.
    Ecco perché sono qui: non cerco soluzioni ma idee, pareri, consigli anche generici, visto che sono un contenitore vuoto ma con intelligenza sufficiente a discernere tra consigli da adottare e ricordare o le cazzate che sui forum, ahimé, ogni tanto si trovano.

    Buon Java a tutti!

  9. #9
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    credi che altri qui non ne hanno spesi soldi per comprarsi libri? C'è gente che fa anche le certificazioni e quelle costano.
    Oltretutto se giri un po' trovi le edizioni in pdf, non saranno aggiornatissime, ma per iniziare a seguire un discorso logico vanno bene, specie se integri con quanto trovi sulla documentazione (che in genere è aggiornato).
    Riguardo al tempo, molti usano il proprio tempo libero per gli approfondimenti, oltretutto sei ancora alle scuole superiori dove il carico non è lo stesso che hai seguendo corsi universitari e/o lavorando.
    Bisogna scegliere cosa si vuole fare, se giocare o documentarsi e purtroppo questo lo si fa non venendo meno al resto dei nostri impegni.

    Per cui prova ad impostare il frame graficamente, 10 bottoni per le cifre, 4 per le operazioni, 1 per l'uguale e 1 per il reset (CE) e fai funzionare questo, poi si pensa ad aggiustamenti grafici.
    Il resto ti dico di lasciarlo perdere per il momento per non aggiungere troppa complessità al tutto.
    Riguardo alla pressione di ENTER è possibile farlo, ma non è immediato. Per ora fai funzionare tutto premendo bottoni

  10. #10
    Utente di HTML.it
    Registrato dal
    Nov 2010
    Messaggi
    5
    Originariamente inviato da valia
    credi che altri qui non ne hanno spesi soldi per comprarsi libri? C'è gente che fa anche le certificazioni e quelle costano.
    Oltretutto se giri un po' trovi le edizioni in pdf, non saranno aggiornatissime, ma per iniziare a seguire un discorso logico vanno bene, specie se integri con quanto trovi sulla documentazione (che in genere è aggiornato).
    Riguardo al tempo, molti usano il proprio tempo libero per gli approfondimenti, oltretutto sei ancora alle scuole superiori dove il carico non è lo stesso che hai seguendo corsi universitari e/o lavorando.
    Bisogna scegliere cosa si vuole fare, se giocare o documentarsi e purtroppo questo lo si fa non venendo meno al resto dei nostri impegni.

    Per cui prova ad impostare il frame graficamente, 10 bottoni per le cifre, 4 per le operazioni, 1 per l'uguale e 1 per il reset (CE) e fai funzionare questo, poi si pensa ad aggiustamenti grafici.
    Il resto ti dico di lasciarlo perdere per il momento per non aggiungere troppa complessità al tutto.
    Riguardo alla pressione di ENTER è possibile farlo, ma non è immediato. Per ora fai funzionare tutto premendo bottoni
    Comincio a capire meno questo approccio ostinatamente aggressivo nei miei confronti, io cerco di spiegarmi e faccio di tutto per non sembrare presuntuoso.

    Se prima devo laurearmi, allora aspetta un attimo (circa un lustro, non di più) e poi andiamo avanti a parlarne...

    Di ricerche in Internet ovviamente ne ho fatte, ma il materiale è davvero parecchio, non volevo finire troppo fuori strada pur cercando di leggere e capire più o meno tutto quel che mi sembrava inerente allo scopo che avremmo dovuto perseguire, e perciò ho pensato di chiedere ANCHE qui, ma mi sembra di averlo già spiegato.

    Ti ringrazio per i tuoi consigli, vi terrò informati di eventuali sviluppi.

    Saluti
    Isacco

    P.S.: non è che perché siamo alla scuola superiore stiamo lì a grattarcelo... non so in Italia, ma in Svizzera lavoriamo parecchio, e su tanti fronti, dalla filosofia al tedesco, alla matematica. Di certo non giochiamo.


Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.