Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 16 su 16
  1. #11
    Utente di HTML.it
    Registrato dal
    Dec 2016
    Messaggi
    31
    Quando tento di caricare il file Classi.java mi dice "file non valido".
    Inoltre non so come compilarlo un unico file per vedere se funziona.
    Credo che inviarti il progetto in formato zip sia meglio (Ovviamente progetto si fa per dire, ho lasciato solo le 5 classi, non è il progetto completo)

  2. #12
    Utente di HTML.it
    Registrato dal
    Oct 2014
    residenza
    Padova
    Messaggi
    361
    Ok il progetto va bene, io in generale andrei meglio con un file singolo anche perché così non serve fare il download e si ha tutto sotto mano.
    Al massimo se non riesci a caricare un .java cambia l'estensione in .txt ma mantieni la stessa struttura che dicevo.


    A me comunque il problema "si risolve" se inserisco l'istruzione che ti dicevo dentro all' invokeLater () di SwingUtilities.
    In pratica nella classe Disciplina1, alla fine del costruttore, modifichi le due righe seguenti :


    codice:
    scrollesterno.getVerticalScrollBar().setUnitIncrement(7);
    c.add(scrollesterno);

    In queste :


    codice:
    scrollesterno.getVerticalScrollBar().setUnitIncrement(7);
    SwingUtilities.invokeLater (new Runnable () {
            public void run () {
                scrollesterno.getViewport().setViewPosition(new Point(0, 0));
            }
         });
    c.add(scrollesterno);

    In Swing tutte le azioni che coinvolgono o modificano l'interfaccia dovrebbero avvenire all'interno di un unico thread a questo deputato, detto Event Dispatch Thread (EDT).
    In teoria il problema è più a monte, nel senso che è proprio tutta l'inizializzazione dell'applicazione che dovrebbe essere fatta in questo modo, questa è solo una toppa temporanea.


    Se ti interessa approfondire potresti iniziare con il tutorial ufficiale, qui trovi il link alla seconda pagina che mostra già un esempio di uso dell' invokeLater(), ma io mi darei anche una letta all'introduzione. Poi c'è ancora tanto da migliorare qua e là
    Ultima modifica di Ansharja; 08-01-2017 a 23:19

  3. #13
    Utente di HTML.it
    Registrato dal
    Dec 2016
    Messaggi
    31
    Grazie mille, hai risolto il mio problema, sono molto felice, ora funziona
    Mi spiegheresti meglio quelle due righe di codice "magiche" che hai scritto? Non ho ben capito cosa hai fatto. Io avevo solo scritto

    codice HTML:
    scrollesterno.getViewport().setViewPosition(new Point(0, 0))
    ma non funzionava, cosa sarebbe quest'altro pezzo?
    codice HTML:
    SwingUtilities.invokeLater (new Runnable () {
            public void run ()
    Per quanto riguarda il tutorial, domani mattina me lo leggo, grazie anche per quello!
    Sei stato gentilissimo e disponibilissimo

  4. #14
    Utente di HTML.it
    Registrato dal
    Oct 2014
    residenza
    Padova
    Messaggi
    361
    Quote Originariamente inviata da Ansharja Visualizza il messaggio
    In Swing tutte le azioni che coinvolgono o modificano l'interfaccia dovrebbero avvenire all'interno di un unico thread a questo deputato, detto Event Dispatch Thread (EDT).In teoria il problema è più a monte, nel senso che è proprio tutta l'inizializzazione dell'applicazione che dovrebbe essere fatta in questo modo, questa è solo una toppa temporanea.
    Questa era una prima piccola spiegazione alle righe "magiche" che ho inserito .

    Dipende appunto dal fatto che attraverso l'uso di invokeLater sei sicura che l'azione venga eseguita nel contesto dell'EDT, dove dovrebbero essere eseguite le istruzioni relative alla modifica dell'interfaccia.
    Ma questo dovrebbe appunto avvenire in generale, quello non è il modo migliore di risolvere la cosa.

    Il tutorial che ti ho linkato è comunque relativo a questo argomento, prova intanto a leggere questo o a cercare in generale domande e risposte relativi all' EDT, ne troverai anche in italiano immagino (ma parti dal tutorial che è la "risorsa ufficiale").

    Ci sarebbero poi anche altre cose che potresti già guardarti, se hai voglia si può approfondire. Sia pratiche relative al design, che comunque migliora con il tempo e l'esperienza (io in due anni ho fatto qualche passo avanti ma sono ancora alle prime armi rispetto agli utenti saggi del forum ), sia di altre buone pratiche da considerare e alcune meno buone da evitare.

    Ma potrebbe anche interessarti il rendere l'applicazione un po' più gradevole dal punto di vista estetico, con l'uso dei LookAndFeel (non è solo una questione estetica in realtà, un utente apprezzerà in genere il fatto di trovare i componenti come pulsanti e checkbox ma anche i font simili a quelli a cui è abituato).Si può ad esempio settare il LookAndFeel in modo che sia quasi identico a quello del sistema operativo, o scegliere tra altri (sempre se disponibili).Io ad esempio trovo il Metal (quello impostato di default) orrendo dal punto di vista estetico, poi è questione di gusti
    Ultima modifica di Ansharja; 09-01-2017 a 00:43

  5. #15
    Utente di HTML.it
    Registrato dal
    Dec 2016
    Messaggi
    31
    Quote Originariamente inviata da Ansharja Visualizza il messaggio
    Questa era una prima piccola spiegazione alle righe "magiche" che ho inserito .

    Dipende appunto dal fatto che attraverso l'uso di invokeLater sei sicura che l'azione venga eseguita nel contesto dell'EDT, dove dovrebbero essere eseguite le istruzioni relative alla modifica dell'interfaccia.
    Ma questo dovrebbe appunto avvenire in generale, quello non è il modo migliore di risolvere la cosa.

    Il tutorial che ti ho linkato è comunque relativo a questo argomento, prova intanto a leggere questo o a cercare in generale domande e risposte relativi all' EDT, ne troverai anche in italiano immagino (ma parti dal tutorial che è la "risorsa ufficiale").

    Ci sarebbero poi anche altre cose che potresti già guardarti, se hai voglia si può approfondire. Sia pratiche relative al design, che comunque migliora con il tempo e l'esperienza (io in due anni ho fatto qualche passo avanti ma sono ancora alle prime armi rispetto agli utenti saggi del forum ), sia di altre buone pratiche da considerare e alcune meno buone da evitare.

    Ma potrebbe anche interessarti il rendere l'applicazione un po' più gradevole dal punto di vista estetico, con l'uso dei LookAndFeel (non è solo una questione estetica in realtà, un utente apprezzerà in genere il fatto di trovare i componenti come pulsanti e checkbox ma anche i font simili a quelli a cui è abituato).Si può ad esempio settare il LookAndFeel in modo che sia quasi identico a quello del sistema operativo, o scegliere tra altri (sempre se disponibili).Io ad esempio trovo il Metal (quello impostato di default) orrendo dal punto di vista estetico, poi è questione di gusti
    Grazie per i preziosi consigli. Se puoi lasciarmi qualche link oltre quello che mi hai lasciato mi farebbe tanto piacere. Cercherò di migliorarmi. Grazie davvero

  6. #16
    Utente di HTML.it
    Registrato dal
    Oct 2014
    residenza
    Padova
    Messaggi
    361
    Quote Originariamente inviata da raissa95 Visualizza il messaggio
    Se puoi lasciarmi qualche link oltre quello che mi hai lasciato mi farebbe tanto piacere.
    La prima cosa che dovresti evitare, come dicevo in precedenza, è lavorare in modo parallelo sui vettori.
    Intendo il punto del codice in cui fai :

    codice:
    ImageIcon[] immagini = new ImageIcon[15];
    JLabel listaIcone[]=new JLabel15];
    JLabel costi[]=new JLabel[15];
    JTextArea areedescr[]=new JTextArea[15];
    JTextArea areetest[]=new JTextArea[15];
    Border border = BorderFactory.createLineBorder(Color.BLACK);
    JPanel sp[]=new JPanel[15];
    JPanel st[]=new JPanel[15];
    JPanel sez[]=new JPanel[15];
    String stringurl[]=new String[15];
    Lavorare in questo modo va contro i principi della programmazione ad oggetti (ad esempio ti impedisce di sfruttare l'ereditarietà e l'incapsulazione), e rende il codice difficile da comprendere e da modificare.
    Se per ogni disciplina hai bisogno di gestire un'immagine, un costo, un'area di descrizione etc., allora ti conviene creare una classe (ad esempio PannelloDisciplina), che modelli tutti questi dati (come campi di istanza).

    Per il resto non avrei veri e propri link utili da dare, o almeno non uno che spieghi approfonditamente tutto un argomento.
    Nel senso che alcune cose che avevo detto in precedenza, come rendere visibile il frame solo come ultima operazione (soprattutto non aggiungere componenti successivamente!), o evitare il setSize () sui componenti, le ho apprese leggendo varie domande e risposte sui forum più che utilizzando una vera e propria guida.
    In particolare per il frame usa il metodo pack (), per gli altri componenti i LayoutManager rispettano più spesso la preferredSize dei componenti (vedi getPreferredSize() e setPreferredSize()).

    Anche il fatto di utilizzare ascoltatori anonimi per i pulsanti è un'idea che mi sono fatto un po' alla volta leggendo qua e là, ma non è detto che sia sempre la via migliore (leggi qua ad esempio, anche se non ci sono risposte così complete).
    In generale il fatto di usare una "anonymous class" come listener ti permette di evitare di ricercare la sorgente dell'evento con actionCommand o getSource() vari e dover passare variabili esternamente alla classe.

    Ad esempio il tuo bottone button1 in PrimaFinestra1 potrebbe avere un listener come questo per aprire il nuovo frame e distruggere il vecchio alla pressione del tasto:

    codice:
    button1.addActionListener (new ActionListener () {
        public void actionPerformed (ActionEvent e) {
            new ListaDiscipline1();
            dispose();
        }
    });
    Quando però cominci ad aver un sacco di pulsanti e dover riscrivere codice simile per ogni ascoltatore questa via potrebbe non essere la più indicata, anche se è la più sicura.

    Per quanto riguarda il LookAndFeel, se ti interessa, il tutorial ufficiale lo trovi qui.
    Datti una sbirciata, forse è un po' troppo tecnico in diverse parti, al massimo guardati gli esempi.
    Io comunque in tutte le mie applicazioni utilizzo il SystemLookAndFeel, lo trovo decisamente il più gradevole e sicuramente è anche il più familiare per l'utente.

    Come troverai negli esempi, lo puoi impostare in questo modo :

    codice:
    public static void main(String[] args) {
        try {
             UIManager.setLookAndFeel( UIManager.getSystemLookAndFeelClassName());
        } 
        catch (Exception e) {
           // handle exception
        }
        // Qui inizializzi l'applicazione ...
    }
    Negli esempi che trovi in realtà le eccezioni vengono catturate separatamente, a me in questo contesto non interessa...

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 © 2026 vBulletin Solutions, Inc. All rights reserved.