Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 19
  1. #1

    esempi di codice per una jframe con elenco

    Ciao Ragazzi!
    Inanzitutto buon natale a tutti!

    Sono poco esperto con le interfaccie grafiche in Java, ho bisogno di un campione di codice da poter copiare per comprendere il funzionamento della seguente cosa:

    Devo realizzare un interfaccia grafica (una JFrame) che visualizzi al suo interno il contenuto di due o più vettori di stringhe.
    I vettori devono essere visualizzati cosi:
    La prima voce del menù deve essere il primo elemento del vettore e in seguito vanno messi gli altri.
    Ogni stringa deve essere associata a un componente sellezionabile (avete presente quelli dove si mette il segno di spunta).
    Inoltre devo inserire una scroll bar a lato della finestra in caso gli elementi del vettore siano tanti, ad esempio 200-300.

    Vi sarei grato se mi poteste aiutare dandomi degli esempi di codice.

    PS:Se non sono stato chiaro posso fare un piccolo schema a Paint di tutto ciò.

    Saluti
    Andrea

  2. #2
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Meglio che ti studi i componenti swing prima, leggi qui: http://java.sun.com/docs/books/tutor...omponents.html
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  3. #3
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: esempi di codice per una jframe con elenco

    Originariamente inviato da asafarakaratara
    Devo realizzare un interfaccia grafica (una JFrame) che visualizzi al suo interno il contenuto di due o più vettori di stringhe.
    I vettori devono essere visualizzati cosi:
    La prima voce del menù deve essere il primo elemento del vettore e in seguito vanno messi gli altri.
    Ogni stringa deve essere associata a un componente sellezionabile (avete presente quelli dove si mette il segno di spunta).
    Inoltre devo inserire una scroll bar a lato della finestra in caso gli elementi del vettore siano tanti, ad esempio 200-300.
    La cosa è fattibilissima e tra l'altro in almeno 2 modi differenti.
    Dovresti però precisare un po' di cose. Parli del componente selezionabile, quello che ha il "segno di spunta" ... bene, questo in Swing è il componente che si chiama JCheckBox. Con tale componente puoi avere la classica casellina quadrata con o senza la spunta, in pratica gestisci uno stato 'true' o 'false'.
    Ecco le domande:
    - innanzitutto cosa ci devi poi fare con questo insieme di "flag" true/false??
    - hai bisogno di tenere "associato" il flag alla stringa? (immagino di sì).
    - hai bisogno di preimpostare lo stato dei checkbox a video? In pratica in "input" per creare la interfaccia grafica cosa devi avere? Un array/collezione di stringhe o un array/collezione di flag+stringa?

    Le soluzioni a cui accennavo sono appunto principalmente 2:

    1) In un pannello (JPanel) imposti un layout manager che tiene i componenti disposti in verticale (dovrebbe andarti bene un BoxLayout verticale o un GridLayout di N righe x 1 colonna) e in questo pannello inserisci N JCheckBox. Il pannello viene poi messo come "view" di un JScrollPane che gestisce lo scrolling. Il JScrollPane lo metti poi da qualche parte, in un altro "contenitore", come ad esempio il content pane di un JFrame.

    2) Usi un JTable, la classica tabella a griglia di NxM celle. Ma qui le cose si complicano. JTable si basa sui "table model" e in questo caso dovresti implementare un "tuo" table model che ha una sua struttura dati interna che "modella" l'insieme di flag+stringa. Il table model "espone" quindi al di fuori i dati come N righe per 2 colonne. La prima colonna la espone come tipo Boolean (il che fa sì che il renderer di default mostri le celle in questa colonna come dei JCheckBox) e la seconda colonna come String o Object (non c'è differenza, almeno per default) tale per cui sono visualizzate delle stringhe nella colonna. Anche qui, il JTable viene messo come view di un JScrollPane, sempre per la gestione dello scrolling.
    Questa è la soluzione più flessibile, dove puoi "modellare" i dati praticamente come ti pare.

    Ti è già stato suggerito da Alex'87 di studiare i componenti Swing. Questo direi che è fondamentale. Per fare quello che hai chiesto è necessario essere almeno un po' ferrati e "versati" sui componenti Swing e sui layout manager.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  4. #4
    Premetto che ho studiato le basi del Java Swing e AWT, ma non conosco tutto nei dettagli.
    Purtroppo ho realizzato poche interfacce grafiche finora e questa è la più complessa che mi è stata richiesta finora.
    Purtroppo non ho abbastanza tempo per imparare ad usare il codice come vorrei, quindi necessito di qualcuno che mi possa dare una mano sulle parti che non so.

    Devo creare un interfaccia di questo tipo:

    []Proprietario
    []Nave1
    []Nave2
    []Proprietario
    []Nave1
    []Nave2
    []Nave3
    []Nave4
    []Proprietario
    []Nave1
    []Nave2
    --------------------------------------
    |OK| |ANNULLA|
    --------------------------------------


    Il Check Box come componente andrabbe bene suppongo, ma ho notato tra le dispense che ho studiato che c'è ne uno diverso a forma di pallino, sapete di che componente parlo?


    Io devo creare un interfaccia grafica che serva a selezionare quali navi è abilitato a vedere un dato Osservatore.

    Quindi pensavo di fare una cosi:
    Creo un vettore di stringhe, la prima parola sarà il nome del proprieterio, le seguenti le navi.
    Creo più vettori di stringhe, il numero di stringhe in un vettore sarà pari al numero di navi di un proprietario + 1(ovvero il nome del proprietario che viene visualizzato all'inzio).

    Mi serve riuscire a fare una cosa cosi: Quando viene spuntata la casella con il nome del proprietario diventano automaticamente spuntate tutte le caselle con i nomi delle navi di quel proprietario(quindi tutte le altre voci contenute nel vettore di stringhe).

    Poi pensavo (e questo so come farlo) di creare due JButton, uno che sarà esci e uno che sarà Ok, quindi nel action listener controllo quando viene premuto un bottone, se è il bottone di OK controllo quali caselle sono spuntate e quindi mando le stringhe che rappresentano quelle caselle come return in un vettore di stringhe per poi fare altre cose.

    Non ho mai utilizzato un JTable ne mai un JScrollPane e speravo di comprendere meglio il loro utilizzo direttamente inziando ad implementare questa parte di interfaccia grafica.
    Casomai hai esempi di JTable come dicevi nel caso 2?

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da asafarakaratara
    Purtroppo non ho abbastanza tempo per imparare ad usare il codice come vorrei
    Capisco ...

    Originariamente inviato da asafarakaratara
    Il Check Box come componente andrabbe bene suppongo, ma ho notato tra le dispense che ho studiato che c'è ne uno diverso a forma di pallino, sapete di che componente parlo?
    Questo si chiama JRadioButton. Ma non è solo una questione "visiva" di un pallino piuttosto che un quadrato con la spunta .... il fatto di usare uno o l'altro (JCheckBox o JRadioButton) è una questione concettuale. JCheckBox (il quadrato di spunta) viene tipicamente usato quando ognuna delle opzioni in un gruppo è indipendente dalle altre mentre JRadioButton (il pallino) viene tipicamente usato quando su un gruppo di N opzioni solo una può essere attiva.
    Ma questa "esclusione multipla" non è rinforzata da JRadioButton!! Sia JCheckBox che JRadioButton sono semplicemente dei componenti che hanno uno stato duale stabile: marcato o non marcato. E basta.
    La esclusione multipla viene forzata e gestita mettendo N button dentro un javax.swing.ButtonGroup, oltre che ovviamente dentro un contenitore "fisico" (es. JPanel o altro).
    Pertanto la esclusione multipla si potrebbe fare sia con un JCheckBox, sia con un JRadioButton, sia con un JToggleButton.

    La questione come ho detto è concettuale e direi anche "pratica", di abitudine. Quando l'utente vede N caselline quadrate, generalmente è abituato a pensare che siano indipendenti. Mentre se vede le caselline rotonde è abituato a pensare che solo 1 tra quelle può essere attivata.

    Originariamente inviato da asafarakaratara
    Creo un vettore di stringhe, la prima parola sarà il nome del proprieterio, le seguenti le navi.
    Creo più vettori di stringhe, il numero di stringhe in un vettore sarà pari al numero di navi di un proprietario + 1(ovvero il nome del proprietario che viene visualizzato all'inzio).
    Sì ok, puoi farlo anche così.

    Originariamente inviato da asafarakaratara
    Mi serve riuscire a fare una cosa cosi: Quando viene spuntata la casella con il nome del proprietario diventano automaticamente spuntate tutte le caselle con i nomi delle navi di quel proprietario(quindi tutte le altre voci contenute nel vettore di stringhe).
    Questo che hai descritto è solo uno dei casi. E gli altri? Spunti il proprietario e automaticamente vengono spuntate tutte le navi. Se togli la spunta dal proprietario cosa deve succedere? E con tutto spuntato si deve poter togliere la spunta alle singole navi?
    Insomma ... hai capito: quali sono le relazioni tra proprietario e navi.

    Originariamente inviato da asafarakaratara
    quindi mando le stringhe che rappresentano quelle caselle come return in un vettore di stringhe per poi fare altre cose.
    Ok, questo si può fare tranquillamente.

    Originariamente inviato da asafarakaratara
    Non ho mai utilizzato un JTable ne mai un JScrollPane e speravo di comprendere meglio il loro utilizzo direttamente inziando ad implementare questa parte di interfaccia grafica.
    Casomai hai esempi di JTable come dicevi nel caso 2?
    Esempi di uso di componenti Swing e in particolare di JTable ne trovi tanti tra i miei Java Examples, vedi la mia firma.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    Nei prossimi giorni continuero a studiare l'awt e la swing e guarderò gli esempi che tu hai in firma.
    Ti ringrazio per l'aiuto.
    In seguito è possibile che ti chiederò un esempio di codice per la storia delle caselline (che se spunti la prima si spuntao tutte le stesse di quel vettore) spuntate, che da quanto mi dici penso che vorrò fare con i JCheck Box.
    Inoltre puoi spiegarmi cosa è il JToggleButton?


    andbin ho possibilità di chiederti in privato in seguito degli esempi di codice se ne avessi bisogno?

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da asafarakaratara
    da quanto mi dici penso che vorrò fare con i JCheck Box.
    Sì, per il momento credo che sia la soluzione più semplice e immediata per te.

    Originariamente inviato da asafarakaratara
    Inoltre puoi spiegarmi cosa è il JToggleButton?
    Esteticamente è praticamente come un "normale" pulsante JButton .... solo che ha lo stato "premuto" stabile. In pratica può restare normale o premuto.

    Originariamente inviato da asafarakaratara
    andbin ho possibilità di chiederti in privato in seguito degli esempi di codice se ne avessi bisogno?
    Se preferisci, sì certo.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  8. #8
    Utente di HTML.it
    Registrato dal
    Feb 2009
    Messaggi
    502
    Citazione:
    Originariamente inviato da asafarakaratara
    andbin ho possibilità di chiederti in privato in seguito degli esempi di codice se ne avessi bisogno?

    Se preferisci, sì certo.
    [OT]
    Dico la mia.
    In privato gli eventuali frammenti di codice li vedreste solo in due e non sarebbe utile anche a chi magari in quei frammenti può trovare una soluzione ad una sua domanda.
    [/OT]
    al volante son nervoso

  9. #9
    Visto che può essere di aiuto ad altri, continuo qui con i codici e con le domande:

    Ho fatto gran parte dell'interfaccia grafica di cui vi parlavo.
    Ecco il codice:
    //User Form extende Jfarma implenta action listener
    class userForm extends JFrame implements ActionListener {
    //Costante per la serializzazione
    private static final long serialVersionUID = 2;

    Vector <JCheckBox> ChkBoxes;
    JButton OK,CANCEL;
    JPanel TOP,CENTER,BOTTOM;
    Container container;
    LabeledTextField ID,Password;
    user User;
    JCheckBox all;
    GridLayout grid = new GridLayout();

    public userForm(user User){
    //Da il titolo alla form
    super("Edit User");

    this.addWindowListener (
    new WindowAdapter() {
    //Per la chiusa della finestra
    public void windowClosing(WindowEvent e) {

    dispose();
    System.gc();
    }
    });
    //Tutto il necessario per editare gli user
    this.User = User;
    container = getContentPane();
    container.setLayout(new BorderLayout(2,2));

    TOP = new JPanel(new GridLayout(3,1));
    ID = new LabeledTextField("UserID ",10,User.UserID);
    Password = new LabeledTextField("Password ",10,User.Password);
    TOP.add(ID);
    TOP.add(Password);
    container.add(TOP,BorderLayout.NORTH);
    //Vector che contiene tutti i proprietari una sola volta. Owl sta per OWner Length
    Vector owl = new Vector();

    CENTER = new JPanel(grid);
    all=new JCheckBox("ALL VESSELS",User.RShips.contains("ALL"));
    TOP.add(all);
    all.addActionListener(this);
    ChkBoxes = new Vector<JCheckBox>();
    //Carica il vettore di supporto con i nomi di tutti gli armatori
    for (int i = 0; i< Vessels.size();i++){
    if(owl.indexOf(Vessels.get(i).data.Owner)<0)
    owl.add(Vessels.get(i).data.Owner);
    //ChkBoxes.add(new JCheckBox(Vessels.get(i).data.ShipName,User.RShips .contains(Vessels.get(i).data.ShipName)));
    //CENTER.add(ChkBoxes.lastElement());
    }
    //Printa per Debug il vettore caricato
    for(int i = 0; i<owl.size();i++)
    System.out.println((String)owl.get(i));

    //Crea tanti JPanel quanti gli Armatori
    JPanel armatore;
    for(int i = 0; i<owl.size();i++){
    armatore = new JPanel(new BorderLayout());
    armatore.setBorder(new TitledBorder(
    new EtchedBorder(),
    (String)owl.get(i)));
    //All'interno del JPanel che sta creando correntemente mette tutte le navi di quell'armatore
    for(int j = 0; j< Vessels.size();j++){
    if((Vessels.get(j).data.Owner)==(String)owl.get(i) ){
    //Per Debug ti dice a che altezza ha trovato quel dato armatore e si ripete tutte le volte che lo trova
    System.out.println(Vessels.get(j).data.Owner+" "+j);
    ChkBoxes.add(new JCheckBox(Vessels.get(j).data.ShipName,User.RShips .contains(Vessels.get(j).data.ShipName)));
    armatore.add(ChkBoxes.lastElement());

    }
    }
    CENTER.add(armatore);

    }



    if (all.isSelected())
    for (int i = 0; i<ChkBoxes.size();i++){
    ChkBoxes.get(i).setSelected(true);
    ChkBoxes.get(i).setEnabled(false);

    }

    container.add(CENTER,BorderLayout.CENTER);

    BOTTOM = new JPanel();
    OK = new JButton("OK!");
    OK.addActionListener(this);
    CANCEL = new JButton("CANCEL");
    CANCEL.addActionListener(this);
    BOTTOM.add(OK);
    BOTTOM.add(CANCEL);
    container.add(BOTTOM,BorderLayout.SOUTH);
    pack();
    setVisible(true);
    }

    //Implements ActionListener
    public void actionPerformed(ActionEvent e){
    if (e.getSource()==OK){
    User.UserID=ID.getText();
    User.Password=Password.getText();
    User.RShips.clear();
    if (all.isSelected()){
    User.RShips.add("ALL");
    System.out.println("All Selected");
    } else {
    for (int i = 0; i<ChkBoxes.size();i++)
    if (ChkBoxes.get(i).isSelected())
    User.RShips.add(ChkBoxes.get(i).getText());
    }
    setVisible(false);
    dispose();
    System.gc();
    }

    if (e.getSource()==CANCEL){
    setVisible(false);
    dispose();
    System.gc();
    }

    if (e.getSource()==all){
    for (int i = 0; i<ChkBoxes.size();i++){
    ChkBoxes.get(i).setSelected(all.isSelected());
    ChkBoxes.get(i).setEnabled(!all.isSelected());
    }
    }

    }
    //Per la distruzione dell'oggetto
    protected void finalize() throws Throwable {

    System.out.println("User Form Distrutto");
    }

    }


    Cosa non riesco a fare:
    Non riesco a creare delle JScrollPane, ne trovo sul mio manuale di Java come si fa. Potete farmi un esempio di JScrollPane direttamente applicato al mio codice?
    Inoltre una volta inserite le JScrollPane vorrei che i JPanel fossero larghi esattamente quanto la scritta più lunga che sta al loro interno. Come faccio a fare ciò?
    Ho delle idee ma non mi sembrano "eccellenti" su come creare un pulsante ALL all'interno di ciascun scroll pane che quando viene attivato seleziona tutte le navi di quell'armatore e non quelle esterne, avete idee a riguardo voi?
    Non riesco a fare comparire tutte le navi di un dato armatore nel mio scroll pane! Mi viene visualizzata solo la prima nave per ciascun armatore nel mio scroll pane, avete idea di come fare per farle visualizzare tutte?

  10. #10
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da asafarakaratara
    Ecco il codice:
    Posta il codice a) ben indentato (il tuo non solo non è ben indentato ma contiene pure degli "hard" tab, il carattere ascii 9, quindi inappropriato) e b) tra i tag [ CODE ] (senza spazi attorno CODE), cosa che non hai fatto.

    Originariamente inviato da asafarakaratara
    Non riesco a creare delle JScrollPane, ne trovo sul mio manuale di Java come si fa. Potete farmi un esempio di JScrollPane direttamente applicato al mio codice?
    L'uso basilare più semplice è:

    JScrollPane scrollPane = new JScrollPane(componenteContenuto);

    e poi è il JScrollPane che devi inserire nel tuo "layout" (e non più il componenteContenuto). Sì .. tutto qui!

    Originariamente inviato da asafarakaratara
    Inoltre una volta inserite le JScrollPane vorrei che i JPanel fossero larghi esattamente quanto la scritta più lunga che sta al loro interno. Come faccio a fare ciò?
    Ma nel JScrollPane cosa vuoi mettere? Vedo 3 panel che hai chiamato TOP,CENTER,BOTTOM (ah, i nomi delle variabili non si mettono tutti maiuscoli!!!). Vuoi che ognuno sia contenuto in un JScrollPane??

    Originariamente inviato da asafarakaratara
    Ho delle idee ma non mi sembrano "eccellenti" su come creare un pulsante ALL all'interno di ciascun scroll pane che quando viene attivato seleziona tutte le navi di quell'armatore e non quelle esterne, avete idee a riguardo voi?
    Non riesco a fare comparire tutte le navi di un dato armatore nel mio scroll pane! Mi viene visualizzata solo la prima nave per ciascun armatore nel mio scroll pane, avete idea di come fare per farle visualizzare tutte?
    Purtroppo così su due piedi non posso avere bene una idea/visione chiara di cosa vuoi realizzare. Quindi non posso aiutarti più di tanto. E il tuo codice non posso nemmeno provarlo perché ovviamente servono altre cose.... e solo a vederlo non mi dice nulla ....

    Invece di postare codice poco chiaro (ah, tra l'altro cose come System.gc(); e il finalize() non dovrebbero minimamente interessarti!) forse sarebbe meglio se spieghi "a parole" cosa vuoi fare.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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.