Syra

Posts written by RootkitNeo

  1. .
    Per completezza: https://github.com/DispatchCode/BMPInfo
  2. .
    Quando hai news posta pure. ;)
  3. .
    Il background di un componente si può cambiare. Se non vedo il codice che hai scritto però mi riesce difficile esserti d'aiuto. Provo a scriverti un esempio:

    CODICE
    import java.awt.*;
    import javax.swing.*;
    import javax.swing.plaf.ColorUIResource;

    class Example extends JFrame {
     private JComboBox<String> comboBox;
     
     Example() {
       super("Esempio");
       UIManager.put("ComboBox.background", new ColorUIResource(Color.CYAN));
       UIManager.put("ComboBox.selectionBackground", new ColorUIResource(Color.CYAN));
       
       // Pannello contenitore
       JPanel panel = new JPanel();
       panel.setOpaque(true);
       panel.setBackground(Color.WHITE);
       
       // Primo elemento: combobox con renderer personalizzato
       comboBox = new JComboBox<String>(new String[]{"A", "B", "C"});
       comboBox.setPreferredSize(new Dimension(80,30));
       comboBox.setRenderer(new ComboBoxRenderer());

       panel.add(comboBox);

       add(panel);
       
       
       setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     }
     
     public static void makeGUI() {
       
       
       Example e = new Example();
       e.setSize(300,200);
       e.setVisible(true);
     }
     
     
     public static void main(String[] args) {
       try {
         SwingUtilities.invokeAndWait(new Runnable() {
           public void run() {
             makeGUI();
           }
           
         });
       } catch(Exception e) {}
     }
     
     
     /*
      * Con un renderer personalizzato puoi anche personalizzarti tutti gli altri aspetti,
      * come le posizioni del testo, i colori etc
      */
     
     class ComboBoxRenderer extends JLabel implements ListCellRenderer<Object> {
       
       public ComboBoxRenderer() {
           setOpaque(true);
           setHorizontalAlignment(CENTER);
           setVerticalAlignment(CENTER);
       }

       public Component getListCellRendererComponent(JList<?> list, Object value, int index, boolean isSelected, boolean cellHasFocus) {

         setText(value.toString());

         if (isSelected) {
             setBackground(Color.WHITE);
         } else {
             setBackground(Color.GREEN);
         }

         return this;
       }
     }
    }


    first

  4. .
    Hai provato a cambiare L&F? Magari Metal proprio. Dai un occhio a questa pagina: http://docs.oracle.com/javase/tutorial/uis....html#available
    Dipende che problema hai con il JComboBox. E' il suo colore? Se vuoi puoi cambiarlo utilizzando setBackground().
  5. .
    Ciao, cercherò di risponderti al meglio e di esserti d'aiuto.


    CITAZIONE (Kohei @ 27/4/2016, 20:49) 
    Salve a tutti, questo pomeriggio ho parlato con eXander che mi ha consigliato di aprire un topic in questa spiegazione. Vorei avere una delucidazione sulle GUI in Java. Innanzitutto faccio una premessa, utilizzo come IDE NetBeans e, per la creazione delle GUI, uso l'apposito tool offerto dal programma. Questo perché non ho ancora molta esperienza nell'ambito delle GUI e quindi non saprei se il codice scritto sia in qualche modo "corretto". Inoltre, sono del parere che se qualcuno ha già fatto il lavoro "sporco" ed il codice è testato e funzionante, è meglio riutilizzarlo, no?

    Di certo la tua esperienza non aumenterà se ti affiderai ad un tools il cui scopo è sì velocizzare il lavoro, ma di certo non quello di apprendere i componenti che stai utilizzando. Di solito gli IDE all'inizio sono sconsigliati proprio perchè non permettono di imparare.
    Ti consiglierei quindi di utilizzare il compilatore e l'interprete da riga di comando, e di studiare AWT/Swing dal tutorial ufficiale di Oracle. Quando avrai abbastanza dimestichezza allora anche l'IDE può aver senso, visto che a quel punto saprai *bene* ciò che starai facendo.


    CITAZIONE (Kohei @ 27/4/2016, 20:49) 
    In questi giorni sto sviluppando un'applicazione, precisamente un WYSIWYG amatoriale che, alla pressione di un jButton, mi genera il codice corrispondente al rispettivo tag. Vorrei realizzare un'interfaccia grafica più carina e soprattutto che sia univoca su tutti i sistemi operativi. Il L&F Nimbus non mi piace molto e preferirei personalizzare ciascun singolo componente. Ma se per i jButton è possibile farlo utilizzando un'immagine, la stessa cosa non posso farla per un componente quale il jComboBox.

    Dovresti mostrare del codice; senza esso è complicato poter rispondere. Il L&F puoi cambiarlo, ne esistono un sacco (compreso quello di default del sistema). Puoi anche scaricarne dalla rete. Potrebbe interessarti il Cross Platform (Metal, è il suo nome). Qui puoi trovarne alcuni "recensiti": www.jwrapper.com/blog/6-great-look-...java-app-pretty
    Ne troverai sicuramente altri in rete, come ad esempio JTatoo: www.jtattoo.net/ScreenShots.html

    CITAZIONE (Kohei @ 27/4/2016, 20:49) 
    Ho letto dell'esistenza di JavaFX, però non credo sia ancora il momento di spingermi a tanto, per quanto la tentazione sia forte dal momento che prevede l'utilizzo di un foglio di stile .css per gestire la grafica.Mi chiedo quindi se sia possibile in qualche modo ottenere qualcosa di simile e personalizzato utilizzando gli Swing.

    JavaFX lo utilizzai anni fa, quando era ancora a sè stante. Non ho esperienze pratiche con questa libreria attualmente, quindi non saprei consigliarti al meglio. La cosa certa è che è molto diverso dall'utilizzo di Swing, quindi potresti leggerti un pò le basi di AWT e poi dare un occhio a JavaFX... se non ti ispira, passi a Swing. Personalmente ho provato a rimetterci mano qualche mese fa per curiosità, ma visto il poco tempo ho abbandonato subito: è molto diversa sintatticamente rispetto a Swing. Qui trovi tutto: http://docs.oracle.com/javase/8/javase-cli...echnologies.htm
  6. .
    La manipolazione di immagini può essere oggetto di esercizi carini ed interessanti, e questo penso sia uno di quelli. Vorrei porre dei paletti alla sua semplicità limitando ad alcuni tipi di soluzioni; tuttavia sono consapevole che se facessi così, la partecipazione sarebbe minima o nulla.




    Lo scopo dell'esercizio è piuttosto semplice: convertire un'immagine BMP a colori in una in scala di grigi. L'immagine in questione la potete scaricare da questo link: download Mediafire.

    Potete vederla qui:


    Vi invito a scaricare quella linkata precedentemente in quanto quest'ultima non è in formato BMP.

    Questo dovrà essere il risultato (sfumature che differiscono di poco saranno considerate valide):






    Potete utilizzare qualsiasi linguaggio. Le soluzioni maggiormente apprezzate saranno quelle che non utilizzano funzioni o librerie built-in del linguaggio scelto (o librerie di terze parti).

    Buon divertimento!
  7. .
    Inizia con l'ITIS, poi il resto vedrai quando sarà il momento. Hai ancora davanti 5 anni di superiori come minimo. Forse più che ingegneria sarebbe meglio informatica, se è questa ad interessarti.
  8. .
    La password per il database è quella che hai scelto quando hai installato MySQL.
  9. .
    Il lister personalizzato lo utilizzo per creare un ascoltatore dedicato al Model. Quando il model viene aggiornato e lo stato interno cambia, la GUI viene aggiornata grazie alla notifica di questo evento.
  10. .
    Il puntatore, come dice la parola stessa, punta, fa riferimento a qualcosa. Questo "qualcosa" è l'indirizzo di memoria in cui si trova il dato. Quando passi una variabile ad una funzione, questo passaggio avviene per valore; il che significa che, come diceva raxell all'inizio, viene copiato il valore di quella variabile. Nel caso di un puntatore ciò che passerai alla funzione è l'indirizzo della variabile, e non una copia del numero. Ne segue che la variabile puntatore che riceve quell'indirizzo farà riferimento allo stesso indirizzo di memoria dell'altra variabile; conseguentemente, visto che entrambe le variabili puntano alla stessa memoria, se una di esse cambia il contenuto di quella locazione, il contenuto cambierà per entrambi.

    Nel caso di specie puoi fare così:

    CODICE
    #include<stdio.h>

    void scambio(int *a, int *b) {
     int temp = *a;
     *a = *b;
     *b = temp;
    }

    int main() {
     int a = 10, b = 100;
     
     printf("a: %d\nb: %d\n\n", a, b);
     scambio(&a, &b);
     printf("a: %d\nb: %d\n", a, b);

     return 0;
    }


    Output:

    a: 10
    b: 100

    a: 100
    b: 10



    L'operatore & ottiene l'indirizzo della variabile. Il puntatore, come detto sopra, memorizza l'indirizzo.
    Stampando gli indirizzi infatti noterai:

    CODICE
    #include<stdio.h>

    void scambio(int *a, int *b) {
     int temp = *a;
     *a = *b;
     *b = temp;
     
     printf("\n\nIndirizzo di a, scambio(): 0x%&#173;X\nIndirizzo di b, scambio(): 0x%&#173;X\n",&(*a), &(*b));
    }

    int main() {
     int a = 10, b = 100;
     
     printf("\n\nIndirizzo di a, main(): 0x%&#173;X\nIndirizzo di b, main(): 0x%&#173;X\n",&a, &b);
     
     printf("a: %d\nb: %d\n\n", a, b);
     scambio(&a, &b);
     printf("a: %d\nb: %d\n", a, b);

     
     
     
     return 0;
    }


    Output:


    Indirizzo di a, main(): 0x29FF0C
    Indirizzo di b, main(): 0x29FF08
    a: 10
    b: 100



    Indirizzo di a, scambio(): 0x29FF0C
    Indirizzo di b, scambio(): 0x29FF08
    a: 100
    b: 10
  11. .
    Non penso abbia copiato male dal libro, penso che il libro stesse piuttosto dimostrando che senza puntatori lo scambio non avviene (ed ecco perchè il libro stesso ha detto che si devono utilizzare i puntatori).

    L'esempio che ti sta mostrando il libro è l'esempio classico sui puntatori. Non prendere però l'esempio "alla lettera", in quanto ciò che vuole passarti è che utilizzando i puntatori passi un indirizzo di memoria (per meglio dire, è il puntatore che memorizza l'indirizzo). La potenza dei puntatori la coglierai più avanti, così come il loro utilizzo.
  12. .
    L'invocazione avviene utilizzando il Pattern Observer che cito anche nell'articolo (o citerò, dipende sino a dove sei arrivato ora). Il meccanismo è quello che vedrai più chiaramente nel terzo esempio: un componente viene registrato per ricevere un evento (come il click su un bottone, quindi ActionListener), e quando l'evento si verifica i componenti che stanno osservando ricevono la notifica dell'evento. Il funzionamento è in pratica quello di una callback.
    Non è quindi l'oggetto interessato che verifica la presenza di un'azione, ma è l'azione stessa che avverte l'oggetto (è il meccanismo opposto al polling).

    Nel terzo esempio non utilizzo Observer/Observable, ma creo proprio un evento personalizzato. Nell'articolo è anche spiegato il motivo della scelta.
  13. .
    No, perchè hai dichiarato float med;, ma con la scanf leggi un intero. Il fatto di leggere un intero ma fare somme su float costringe la CPU a trattare i numeri che inserisci come "a virgola mobile" e di conseguenza interviene la FPU. Come diceva rax le operazioni in virgola mobile sono più lente.
    Come ottimizzazione quindi puoi memorizzare il risultato finale in una variabile float (il valore restituito dalla divisione).
  14. .
    Grazie!
    No, non è necessario gestirlo perchè quella classe implementa l'interfaccia MouseListener. L'evento viene registrato utilizzando TrisController (che lo gestisce appunto). E' la stessa cosa del gestirlo nella stessa classe, l'evento lo riceve comunque e viene elaborato.

    Il terzo esempio infatti farà notare poi altre cose (e sarà un pò più articolato).
  15. .
    In teoria sta utilizzando ANSI.
1697 replies since 5/1/2009
.
Top