Consenso all'uso dei cookies

SITO1 -- SITO2 -- Forum1 -- CercaGlobale -- Informativa su Cookie e Privacy


Valutazione discussione:
  • 0 voto(i) - 0 media
  • 1
  • 2
  • 3
  • 4
  • 5
JAVA ottimizzare il codice
#1
Fino ad ora il mio obiettivo è stato ottenere un codice funzionante e sono riuscito a convertire tutte le applicazioni che avevo fatto in vb.net, ora però vorrei migliorarle e vorrei delle dritte.
Quando creo un progettto con GUI faccio clic destro sul nome del progetto e creo il jframe, inserisco i controlli che mi servono e poi passo alla finestra source, in pratica scrivo tutto il codice nella classe del jframe creato, è corretto ? ho iniziato così perché nella classe principale non avevo accesso ai controlli del jframe. In rete si trovano soltanto esempi in cui il jframe viene creato da codice.
Qual'è il modo corretto di procedere ?.
Cita messaggio
Grazie da:
#2
Il modo corretto PER INIZIARE è saper creare le componenti a mano, senza usare lo strumento di "disegno";
questo perché, prima o poi, dovrai accedere in ogni caso al codice Java del JFrame disegnato e delle sue componenti interne (pannelli, etichette, slider ecc. ecc.), per modificare codice e/o comportamenti, quindi devi sapere dove e come mettere le maini.

Quando conoscerai le componenti basilari e come gestirne gli eventi, allora per fare delle GUI più carine userai lo strumento grafico.
Ad ogni modo, l'ultima tendenza per Java in fatto di GUI è usare una nuova libreria di classi chiamata JavaFX (di cui non so ancora nulla), più flessibile e moderna di Swing.
Il mio blog: ZEROZEROCENT.BLOGSPOT.COM
LEGGE DI MURPHY: SE QUALCOSA PUO' ANDAR MALE, LO FARA'
VERSIONE QUANTISTICA DELLA LEGGE DI MURPHY: TUTTO VA MALE CONTEMPORANEAMENTE
Cita messaggio
Grazie da:
#3
(21-10-2018,17:23 )BAT Ha scritto: Il modo corretto PER INIZIARE è saper creare le componenti a mano, senza usare lo strumento di "disegno";
Vero, ma io non ho ambizioni di diventare un esperto programmatore java, comunque posso prendere spunto dal codice creato dal designer ? Supponendo invece che non voglia creare le componenti a mano, è corretto scrive tutto il codice nella classe del jframe creato dal designer ?
Cita messaggio
Grazie da:
#4
(21-10-2018,18:11 )patel Ha scritto: comunque posso prendere spunto dal codice creato dal designer ?
certo che sì!

(21-10-2018,18:11 )patel Ha scritto: Supponendo invece  che non voglia  creare le componenti a mano, è corretto scrive tutto il codice nella classe del jframe creato dal designer?
dipende;
per le componenti grafiche è conveniente (al proposito imparerai a creare classi interne, ossia definire classi dentro altre classi);

per la logica dietro alle azioni da implementare in risposta agli eventi di interfaccia utente è da valutare caso per caso, spesso è meglio non scrivere tutto nello stesso file .java ma separare la parte grafica da quella logica.
Esempio:
se hai un pulsante "controlla se un numero è primo" è ragionevole che la funzione di controllo se un intero è un numero primo sia definita in una classe separata da quella della GUI, dove viene eventualmente importata
Il mio blog: ZEROZEROCENT.BLOGSPOT.COM
LEGGE DI MURPHY: SE QUALCOSA PUO' ANDAR MALE, LO FARA'
VERSIONE QUANTISTICA DELLA LEGGE DI MURPHY: TUTTO VA MALE CONTEMPORANEAMENTE
Cita messaggio
Grazie da:
#5
(21-10-2018,18:39 )BAT Ha scritto: spesso è meglio non scrivere tutto nello stesso file .java ma separare la parte grafica da quella logica.
problemi di leggibilità o di prestazioni ?
ho creato un nuovo progetto e vi ho ricopiato il codice del Newframe.java di un altro progetto dove la GUI e disegnata dal designer, dopo qualche aggiustamento relativo ai nomi funziona perfettamente ma l'aspetto dei controlli è un po' diverso, da cosa dipende ?
Cita messaggio
Grazie da:
#6
(21-10-2018,19:06 )patel Ha scritto: problemi di leggibilità o di prestazioni ?
è una questione di logica e di organizzazione: quanto più separi, meglio puoi riusare il codice. Se definisci tutto in una classe, non potrai importarla facilmente in altri progetti.

(21-10-2018,19:06 )patel Ha scritto: ho creato un nuovo progetto e vi ho ricopiato il codice del Newframe.java di un altro progetto dove la GUI e disegnata dal designer, dopo qualche aggiustamento relativo ai nomi funziona perfettamente ma l'aspetto dei controlli è un po' diverso, da cosa dipende ?
dipende dal L&F (Look and Feel), la parte di Swing che definisce l'aspetto delle componenti.
Java ha un L&F predefinito che può essere variato: prova ad aggiungere all'inizio del codice Java, come variabile di classe, questa stringa che specifica l'aspetto da usare:
Codice:
private static String LOOKANDFEEL = "System";
i valori possibili per la stringa sono (non so se sono tutti quelli possibili):
  • "System" : l'aspetto standard del sistema operativo (che può essere quello di Windows, MacOS, o un DE Linux)
  • null (Java predefinito)
  • "Metal"
  • "Motif"
  • "GTK+"
Non funzionano sempre tutti (devi provare) e naturalmente non è possibile avere l'aspetto di un sistema operativo diverso: è "System" e basta ossia il sistema in uso (non puoi avere Mac o altro).
Aggiungi nel codice la seguente funzione (se non ricordo male l'ho presa pari-pari dal Java Tutorial di Oracle):
Codice:
// imposta il look and feel
   private static void initLookAndFeel() {
       String lookAndFeel = null;      
       if (LOOKANDFEEL != null) {
           if (LOOKANDFEEL.equals("System")) {
               lookAndFeel = UIManager.getSystemLookAndFeelClassName();
           } else if (LOOKANDFEEL.equals("Metal")) {
               lookAndFeel = UIManager.getCrossPlatformLookAndFeelClassName();
           } else if (LOOKANDFEEL.equals("Motif")) {
               lookAndFeel = "com.sun.java.swing.plaf.motif.MotifLookAndFeel";
           } else if (LOOKANDFEEL.equals("GTK+")) { //new in 1.4.2
               lookAndFeel = "com.sun.java.swing.plaf.gtk.GTKLookAndFeel";
           } else {
               System.err.println("Unexpected value of LOOKANDFEEL specified: "
                                  + LOOKANDFEEL);
               lookAndFeel = UIManager.getCrossPlatformLookAndFeelClassName();
           }

           try {
               UIManager.setLookAndFeel(lookAndFeel);
           } catch (ClassNotFoundException e) {
               System.err.println("Couldn't find class for specified look and feel:"
                                  + lookAndFeel);
               System.err.println("Did you include the L&F library in the class path?");
               System.err.println("Using the default look and feel.");
           } catch (UnsupportedLookAndFeelException e) {
               System.err.println("Can't use the specified look and feel ("
                                  + lookAndFeel
                                  + ") on this platform.");
               System.err.println("Using the default look and feel.");
           } catch (Exception e) {
               System.err.println("Couldn't get specified look and feel ("
                                  + lookAndFeel
                                  + "), for some reason.");
               System.err.println("Using the default look and feel.");
               e.printStackTrace();
           }
       }
   } // FINE initLookAndFeel
a questo punto, vai nel codice dove crei JFrame e prima di fare la new JFrame() invocala, insomma qualcosa di simile a
Codice:
initLookAndFeel(); // Imposta il look and feel.
f = new JFrame(); // finestra principale
f.setVisible(true); // rende visibile la finestra

Cambia il valore di private static String LOOKANDFEEL con quelli che ti ho indicato (ricompilando ogni volta) e vedi come cambia l'aspetto.
Il mio blog: ZEROZEROCENT.BLOGSPOT.COM
LEGGE DI MURPHY: SE QUALCOSA PUO' ANDAR MALE, LO FARA'
VERSIONE QUANTISTICA DELLA LEGGE DI MURPHY: TUTTO VA MALE CONTEMPORANEAMENTE
Cita messaggio
Grazie da:
#7
Grazie BAT, funziona
Cita messaggio
Grazie da:
#8
quando pubblico del codice è perché sono certo che funziona... altrimenti non lo pubblico! At
Il mio blog: ZEROZEROCENT.BLOGSPOT.COM
LEGGE DI MURPHY: SE QUALCOSA PUO' ANDAR MALE, LO FARA'
VERSIONE QUANTISTICA DELLA LEGGE DI MURPHY: TUTTO VA MALE CONTEMPORANEAMENTE
Cita messaggio
Grazie da:
#9
ne sono certo, ti volevo confermare che i tuoi consigli non sono andati a vuoto Heart
Cita messaggio
Grazie da:


Vai al forum:


Utenti che stanno guardando questa discussione: 1 Ospite(i)