Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    81

    Swing progettazione gui

    Sto muovendo i primi passi con con le swing di java.
    Volendo progettare una semplice gui che effettui un login e la visualizzazione di un messaggio di benvenuto che componenti dovrei usare?

    ps. L'ho già fatta seguendo esempi on line ma riesco ad ottenere un jframe di login che visualizza un secondo jframe di benvenuto. Io vorrei ottenere una visualizzazione simile al SELF del web ovvero un pannello (800x600) che mostri user/pwd e submit. Al click resti sullo stesso pannello spegnendo i textfield di user/pwd e button mostrando un messaggio di benvenuto

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    la cosa è lunga da descrivere in un thread (ma non difficile, almeno non difficile nei suoi aspetti basilari) . Il primo passo da fare è andare al sito di oracle/sun dedicato a java e cercare "Swing Tutorial ". In esso troverai tutti gli esempi del caso, non solo inerenti su componenti, ma anche sui LayoutManager che potrebbero venirti incontro (in particolare potresti essere interessato a CardLayout
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  3. #3
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Oltre a quanto ha correttamente suggerito Andrea1979, io aggiungerei che quando si vogliono gestire più componenti(/pannelli) di cui solo uno visibile per volta, oltre al CardLayout esiste anche la tecnica più basilare per cui si può rimuovere un componente dal contenitore ed inserirne un altro.
    Come farlo e sopratutto se è necessario fare altro oltre alla sequenza remove/add, dipende dal contenitore e dalla presenza di un layout manager o meno.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    81
    perfect

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    81
    Ho dato un'occhiata sia al funzionamento, sia alla modalità di spegnimento/accessione di un pannello per volta come mi avete suggerito. Volendo pero' confrontarmi con voi, piu' che per risolvere strettamente il problema in oggetto (che ho simulato con i vostri suggerimenti), ma per capire in generale come progettare una gui in termini anche di classi implementate volevo chiedervi ancora:

    In genere come organizzate le classi? una classe per ogni jframe, una per ogni jpanel?
    Come realizzereste login e poi messaggio di benvenuto? quanti jframe, quanti jpanel?
    Puo' un jpanel comunicare con un jframe che lo contiene?

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da assmazz
    In genere come organizzate le classi? una classe per ogni jframe, una per ogni jpanel?
    Come realizzereste login e poi messaggio di benvenuto? quanti jframe, quanti jpanel?
    Puo' un jpanel comunicare con un jframe che lo contiene?
    Più separi, incapsuli le cose e rendi "coese" (finalizzate ad un solo obiettivo principale) e meno "accoppiate" tra di loro le classi e generalmente meglio è, ma questi sono dei principi basilari della OOP.

    Poi come classi, certamente è preferibile avere ad esempio:
    - una classe ApplicationFrame che estende JFrame
    - una classe LoginPanel che estende JPanel

    Nelle mie applicazioni personali generalmente definisco anche es. un MainPanel che fa da pannello principale (e che contiene tutto il resto). Il motivo è che magari la applicazione voglio che sia lanciabile come applicazione "standalone" (dal main() classico) ma anche come "applet". In tal caso aggiungere un solo pannello nel content-pane di un JFrame e nel content-pane di un JApplet ... diventa banale.

    Comunque una cosa del genere come hai detto si può fare in svariati modi, dipende anche molto da come vuoi separare i ruoli.
    E per il fatto della "comunicazione" come dici tu, tieni presente che "comunicare" si intende in genere o assegnare qualcosa direttamente ad un campo di un oggetto (poco preferibile) oppure invocare un metodo su un oggetto. Quindi la questione è solo quella di passare il/i reference necessari dove serve affinché sia possibile invocare "qualcosa".
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    81
    Ok perfetto, in linea teorica allora posso dire di aver intrapeso la strada giusta seguendo i principi oop.
    In pratica pero' mi sto arenando perchè ho tanto da studiare su swing

    Ho buttato giù qualcosa del genere, se serve magari posto il codice:
    classe A: un Jframe principale (chiama B)
    classe B: un Jpanel Login (contiene user/pwd e submit e listener su submit)
    classe C: un JPanel Welcome (contiene messaggio benvenuto)

    metto le credenziale e clicco submit, B me le verifica ora come faccioa dire ad A di caricare C e fare il dispose di B?

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da assmazz
    metto le credenziale e clicco submit, B me le verifica ora come faccioa dire ad A di caricare C e fare il dispose di B?
    Senza andare a studiare architetture più complesse, una soluzione semplice e abbastanza "pulita" è questa.
    Il LoginPanel potrebbe fare solo da form "stupido", senza alcuna logica di autenticazione effettiva delle credenziali.

    LoginPanel però potrebbe:
    - offrire due metodi pubblici getUsername() e getPassword() che restituiscono String (occhio, non i componenti JTextField, sarebbe poco appropriato).
    - ricevere dal costruttore un ActionListener che poi registra sul pulsante di login.

    Il ActionListener andrebbe quindi implementato altrove, ad esempio nella classe del frame o comunque dove c'è la "conoscenza" sia del sistema di autenticazione che del modo in cui i pannelli sono "scambiabili".
    E come puoi dedurre, LoginPanel sarebbe disaccoppiato dal resto, tramite il ActionListener "direbbe" solo: guardate è stato cliccato il pulsante di login, prendetevi username/password e fate cosa volete
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #9
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    81
    Ottimo, l'ho implementato e mi sembra molto piu figo cosi
    Mi mancava effettivamente il meccanismo di notifica e feedback tra componenti...con i listener mi hai aperto un mondo, fino al prossimo intoppo

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.