Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Wind Tre 'accende' il 5G Standalone in Italia: si apre una nuova era basata sui servizi
Wind Tre 'accende' il 5G Standalone in Italia: si apre una nuova era basata sui servizi
Con la prima rete 5G Standalone attiva in Italia, WINDTRE compie un passo decisivo verso un modello di connettività intelligente che abilita scenari avanzati per imprese e pubbliche amministrazioni, trasformando la rete da infrastruttura a piattaforma per servizi a valore aggiunto
OPPO Find X9 Pro: il camera phone con teleobiettivo da 200MP e batteria da 7500 mAh
OPPO Find X9 Pro: il camera phone con teleobiettivo da 200MP e batteria da 7500 mAh
OPPO Find X9 Pro punta a diventare uno dei riferimenti assoluti nel segmento dei camera phone di fascia alta. Con un teleobiettivo Hasselblad da 200 MP, una batteria al silicio-carbonio da 7500 mAh e un display da 6,78 pollici con cornici ultra ridotte, il nuovo flagship non teme confronti con la concorrenza, e non solo nel comparto fotografico mobile. La dotazione tecnica include il processore MediaTek Dimensity 9500, certificazione IP69 e un sistema di ricarica rapida a 80W
DJI Romo, il robot aspirapolvere tutto trasparente
DJI Romo, il robot aspirapolvere tutto trasparente
Anche DJI entra nel panorama delle aziende che propongono una soluzione per la pulizia di casa, facendo leva sulla propria esperienza legata alla mappatura degli ambienti e all'evitamento di ostacoli maturata nel mondo dei droni. Romo è un robot preciso ed efficace, dal design decisamente originale e unico ma che richiede per questo un costo d'acquisto molto elevato
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 13-01-2014, 20:09   #1
-Leo-
Member
 
Iscritto dal: Sep 2013
Messaggi: 85
[Java] Aggiunta di scrollbar ad una finestra

Sera a tutti, come avevo già detto in un precedente post sono ai primi passi con java e mi trovo davanti ad un problema che non riesco a risolvere.
Se io creo una finestra in questo modo:

Codice:
import java.awt.*;
import javax.swing.*;
public class Prova extends JFrame {
    public static void main(String[] a) {
        Prova Finestra = new Prova();
    }

    public Prova() {
        super ("TITOLO");
        setSize(1000, 500);
        setResizable(false);
        setVisible(true);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    public void paint(Graphics g) {
        g.drawString("testo qualunque",10,100);
    }
}
Come posso fare ad aggiungere delle scrollbar con JScrollpane? Vorrei avere diciamo una finestra che scorre in verticale all'infinito mano a mano che inserisco imput e ottengo risposte dal software (in pratica come avviene con il terminale).
Grazie dell'attenzione.
-Leo- è offline   Rispondi citando il messaggio o parte di esso
Old 14-01-2014, 08:40   #2
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
JScrollPane e' stato pensato per "avvolgere" un controllo, cosi' che se le sue dimensioni superano quelle della finestra, le barre di scorrimento appaiano correttamente.

Nell'applicazione che hai scritto, sei andato a fare l'override del metodo paint() per scrivere un testo. Non e' il metodo "standard" per costruire un'interfaccia grafica, a meno che tu non abbia bisogno di disegnare direttamente sul frame.

Se il tuo scopo e', per esempio, quello di emulare un terminale cosi' come hai spiegato, potresti modificare il programma semplicemente cosi':
Codice:
import java.awt.*;
import javax.swing.*;
public class Prova extends JFrame
{
    public static void main(String[] a)
    {
        SwingConstants.invokeLater( new Runnable()
        {
            @Override
            public void run()
            {
                Prova Finestra = new Prova();
            }
        });
    }

    public Prova()
    {
        super ("TITOLO");
        setSize(1000, 500);
        setResizable(false);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JTextArea textArea = new JTextArea();   /* Questa e' l'area di testo */
        getContentPane().add(new JScrollPane(textArea), BorderLayout.CENTER);

        setVisible(true);
    }
}
la variabile textArea conterra' il testo che l'utente inserisce (o che vuoi visualizzare: ti basta inserirlo usando la setText()).

Spero di aver risposto alla tua domanda. Ciao
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 14-01-2014, 20:58   #3
-Leo-
Member
 
Iscritto dal: Sep 2013
Messaggi: 85
Quote:
Originariamente inviato da sottovento
[...] Spero di aver risposto alla tua domanda. Ciao
Ciao! Si credo proprio che utilizzando la textarea tutto funzioni. Solo che il mio compilatore mi restituisce un errore riguardo alla riga 7:

Codice:
SwingConstants.invokeLater( new Runnable()
però sostituendola con;

Codice:
EventQueue.invokeLater(new Runnable()
sembra funzionare.
-Leo- è offline   Rispondi citando il messaggio o parte di esso
Old 14-01-2014, 21:53   #4
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Quote:
Originariamente inviato da -Leo- Guarda i messaggi
Ciao! Si credo proprio che utilizzando la textarea tutto funzioni. Solo che il mio compilatore mi restituisce un errore riguardo alla riga 7:

Codice:
SwingConstants.invokeLater( new Runnable()
però sostituendola con;

Codice:
EventQueue.invokeLater(new Runnable()
sembra funzionare.
Vabbe' sono un asino. Devi sostituire SwingConstants (o EventQueue) con SwingUtilities. Poi un giorno prestero' anche attenzione a quello che scrivo
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 14-01-2014, 22:16   #5
-Leo-
Member
 
Iscritto dal: Sep 2013
Messaggi: 85
Perfetto grazie! Comunque in giro per la rete ho trovato un ottimo vecchio esempio per creare una textarea sempre fatto da te:

http://www.hwupgrade.it/forum/archiv...t-2543643.html

Modificandolo un peletto sono riuscito ad ottenere la finestra con il font modificato colorato ed ingrandito ecc... insomma tutto quello che volevo... l'unica pecca è che non riesco ad impostarli solo per una determinata riga ma solamente per tutto il testo.

Il codice è:

Codice:
import java.awt.*;
import javax.swing.*;

class MyConsole extends JFrame
{
    private JTextArea ta;

    public MyConsole()
    {
        setSize(800, 600);
        setTitle("My console");
        buildGUI();
    }

    private void buildGUI()
    {
        ta = new JTextArea();
        getContentPane().add(new JScrollPane(ta), BorderLayout.CENTER);
        Font font = new Font("Verdana", Font.BOLD, 12); // AGGIUNTA MIA DEL FONT
        ta.setFont(font); // AGGIUNTA MIA DEL FONT
        ta.setForeground(Color.BLUE); // AGGIUNTA MIA DEL COLORE
 
    }

    public void print (String str)
    {
        ta.append(str);
    }

    public void println(String str)
    {
        ta.append (str + "\n");
    }

    public static void main(String[] args)
    {
        MyConsole myConsole = new MyConsole();
        myConsole.setVisible(true);
        myConsole.println ("Ciao da sottovento");
        myConsole.println ("Oggi e' il mio compleanno");
    }
}
-Leo- è offline   Rispondi citando il messaggio o parte di esso
Old 15-01-2014, 08:40   #6
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Quote:
Originariamente inviato da -Leo- Guarda i messaggi
<CUT>
Modificandolo un peletto sono riuscito ad ottenere la finestra con il font modificato colorato ed ingrandito ecc... insomma tutto quello che volevo... l'unica pecca è che non riesco ad impostarli solo per una determinata riga ma solamente per tutto il testo.
<CUT>
Si, JTextArea serve per visualizzare del testo. Se vuoi delle funzionalita' piu' sofisticate, come quella che vuoi implementare, devi cambiare componente ed utilizzare JEditorPane, il quale puo' visualizzare testo "plain", RTF e html.

Funziona piu' o meno come JTextArea, devi pero' specificargli il tipo di stringa che gli passerai mediante setContentType(String tipo), dove tipo puo' essere
"text/plain", "text/rtf", "text/html".
Per esempio, potresti settare "text/html" e passare una stringa del tipo
"<html><body><font color=red>ciao</font><font color=blue> da sottovento</font></body></html>" utilizzando la setText(), esattamente come JTextArea.
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 15-01-2014, 21:48   #7
-Leo-
Member
 
Iscritto dal: Sep 2013
Messaggi: 85
Ok, sono riuscito a creare una JTextPane (un po' a modo mio probabilmente...) con due tipologie di formattazione del testo. Riporto in breve il codice:

Codice:
import java.awt.*;
import javax.swing.*;
import javax.swing.text.*;

public class Prova
{
    public static void main(String args[]) {
        JFrame Cornice = new JFrame("Simple Attributes");
        Container Contenitore = Cornice.getContentPane();
        Cornice.setSize(1000, 500);
        Cornice.setVisible(true);
        StyledDocument Stile = new DefaultStyledDocument();

        JTextPane RiquadroDiTesto = new JTextPane(Stile);
        RiquadroDiTesto.setEditable(false);
        JScrollPane scrollPane = new JScrollPane(RiquadroDiTesto);
        Contenitore.add(scrollPane, BorderLayout.CENTER);

        SimpleAttributeSet FormattazioneTitolo = new SimpleAttributeSet();
        FormattazioneTitolo.addAttribute(StyleConstants.CharacterConstants.Bold, Boolean.TRUE);
        FormattazioneTitolo.addAttribute(StyleConstants.CharacterConstants.Italic, Boolean.TRUE);

        SimpleAttributeSet FormattazioneCorpo = new SimpleAttributeSet();
        FormattazioneCorpo.addAttribute(StyleConstants.CharacterConstants.Bold, Boolean.FALSE);
        FormattazioneCorpo.addAttribute(StyleConstants.CharacterConstants.Italic, Boolean.FALSE);
        FormattazioneCorpo.addAttribute(StyleConstants.CharacterConstants.Foreground, Color.lightGray);

        try {
            Stile.insertString(Stile.getLength(),"Scegli tra le seguenti opzioni:", FormattazioneCorpo);
            Stile.insertString(Stile.getLength(),"0", FormattazioneCorpo);
            Stile.insertString(Stile.getLength(),"1", FormattazioneCorpo);
            Stile.insertString(Stile.getLength(),"2", FormattazioneCorpo);
            Stile.insertString(Stile.getLength(),": ", FormattazioneCorpo);
            String InputOpzione =  JOptionPane.showInputDialog ("Inserisci una delle opzioni");
            switch (InputOpzione) {
                case "0":
                break;
                case "1":
                break;
                case "2":
                break;
                default:
                break;
            }
        }  catch(Exception e) {
        }
    }
}
Ora gli unici dubbi che ho sono: fare in modo che ogni stringa testuale che viene visualizzata sia su una riga separata (come con println per intendersi) e, se possibile, fare in modo di poter inserire l'input di scelta direttamente nella finestra del programma senza far apparire il popup.
Grazie dei consigli che mi hai dato fin'ora
-Leo- è offline   Rispondi citando il messaggio o parte di esso
Old 16-01-2014, 10:14   #8
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Ciao
senti, non me ne volere ma mi sono permesso di modificare il tuo codice, cercando implementare quello che desideri fare.
Ho fatto diverse modifiche, incluso il nome delle varibili: in Java i nomi delle variabili (locali e membro) cominciano con la lettera minuscola e se sono composte da piu' parole, le iniziali delle parole successive sono maiuscole.
E' una convenzione cosi' radicata in Java che tutti i programmatori si aspettano questo, pertanto mi sono permesso di adeguare il tuo codice.
Ho fatto diverse modifiche. Commentarle tutte mi sembra piuttosto lungo e magari inutile, visto che probabilmente conosci la maggior parte delle cose.
Pertanto metto qui il codice e cerchero' di rispondere alle eventuali domande.
Buona giornata

Codice:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.text.*;

public class Prova
{
    public Prova()
    {
        JFrame cornice = new JFrame("Simple Attributes");
        cornice.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);   // Sottovento
        Container contenitore = cornice.getContentPane();
        cornice.setSize(1000, 500);
        cornice.setVisible(true);
        //StyledDocument stile    = new DefaultStyledDocument();    Sottovento - commento per rimuovere

        JTextPane riquadroDiTesto = new JTextPane();
        //riquadroDiTesto.setEditable(false);
        final StyledDocument stile    = riquadroDiTesto.getStyledDocument();

        JScrollPane scrollPane = new JScrollPane(riquadroDiTesto);
        contenitore.add(scrollPane, BorderLayout.CENTER);

        final SimpleAttributeSet formattazioneTitolo = new SimpleAttributeSet();
        formattazioneTitolo.addAttribute(StyleConstants.CharacterConstants.Bold, Boolean.TRUE);
        formattazioneTitolo.addAttribute(StyleConstants.CharacterConstants.Italic, Boolean.TRUE);

        final SimpleAttributeSet formattazioneCorpo = new SimpleAttributeSet();
        formattazioneCorpo.addAttribute(StyleConstants.CharacterConstants.Bold, Boolean.FALSE);
        formattazioneCorpo.addAttribute(StyleConstants.CharacterConstants.Italic, Boolean.FALSE);
        formattazioneCorpo.addAttribute(StyleConstants.CharacterConstants.Foreground, Color.lightGray);

        JPanel southPanel = new JPanel();
        GridBagLayout layout = new GridBagLayout();
        southPanel.setLayout(layout);
        JLabel lbl = new JLabel ("<html><body><Font color=red>Scegli tra le seguenti opzioni:0,1,2</font></body></html>");
        addBag(southPanel, layout, lbl, 0, 0, 0.0, 0.0, GridBagConstraints.NONE, 1, 1);
        final JTextField tfInput = new JTextField();
        addBag(southPanel, layout, tfInput, 1, 0, 1.0, 0.0, GridBagConstraints.HORIZONTAL, 1, 1);
        JButton btnGo = new JButton("Scrivi");
        btnGo.addActionListener(new ActionListener()
            {
                @Override
                public void actionPerformed(ActionEvent evt)
                {
                    try
                    {
                        String text = tfInput.getText();
                        if (text != null && text.length() > 0)
                            stile.insertString (stile.getLength(), text + "\n", formattazioneCorpo);
                    }
                    catch(BadLocationException e)
                    {
                        e.printStackTrace(System.out);  // Sottovento - altrimenti non si puo' sapere se c'e' qualche problema...
                    }
                }
            });
        addBag(southPanel, layout, btnGo, 2, 0, 0.0, 0.0, GridBagConstraints.NONE, 1, 1);
        contenitore.add(southPanel, BorderLayout.SOUTH);

        try
        {
            stile.insertString(0,"Scegli tra le seguenti opzioni:\n", formattazioneCorpo);    // Sottovento - 0 invece di stile.getLength()
            stile.insertString(stile.getLength(),"0", formattazioneCorpo);
            stile.insertString(stile.getLength(),"1", formattazioneCorpo);
            stile.insertString(stile.getLength(),"2", formattazioneCorpo);
            stile.insertString(stile.getLength(),": \n", formattazioneCorpo);
//            String inputOpzione =  JOptionPane.showInputDialog ("Inserisci una delle opzioni");
//            switch (inputOpzione)
//            {
//                case "0":
//                break;
//                case "1":
//                break;
//                case "2":
//                break;
//                default:
//                break;
//            }
        }
        catch(BadLocationException e)
        {
            e.printStackTrace(System.out);  // Sottovento - altrimenti non si puo' sapere se c'e' qualche problema...
        }
    }

    private void addBag(JPanel panel, GridBagLayout layout, JComponent component, int gridx, int gridy, double weightx, double weighty, int fill, int gridWidth, int gridHeight)
    {
        GridBagConstraints limits   = new GridBagConstraints();
        limits.gridx                = gridx;
        limits.gridy                = gridy;
        limits.anchor               = GridBagConstraints.WEST;
        limits.insets.top           = 1;
        limits.insets.bottom        = 1;
        limits.insets.left          = 2;
        limits.insets.right         = 2;
        limits.weightx              = weightx;
        limits.weighty              = weighty;
        limits.fill                 = fill;
        limits.gridwidth            = gridWidth;
        limits.gridheight           = gridHeight;
        layout.setConstraints(component, limits);
        panel.add(component);
    }

    public static void main(String args[])
    {
        SwingUtilities.invokeLater (new Runnable()
        {
            @Override
            public void run()
            {
                new Prova();
            }
        });
    }
}
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 16-01-2014, 14:04   #9
-Leo-
Member
 
Iscritto dal: Sep 2013
Messaggi: 85
Figurati le tue modifiche al mio codice "abbozzato" sono sempre gradite. Comunque testandolo devo dire che lo scopo è quasi raggiunto, solo che non riesco a fare in modo di poter sfruttare gli input inseriti nel campo di scrittura in basso per navigare tra le opzioni.

Ad esempio: a schermo mi compare "scegli opzione 1,2,3", io digito "2", premo il bottone "Scrivi" e vengono eseguite le istruzioni in 2 e mostrati eventuali altri sottomenù a cui poter accedere sempre con gli input nella textfield in basso.

Ovvero quello che accade con questo codice privo di interfaccia:

Codice:
import java.util.Scanner;
public class prova{
    public static void main(String[] args) {
        System.out.println ("Scegli tra le seguenti opzioni:");
        System.out.println ("1 - opzione 1");
        System.out.println ("2 - opzione 2");
        System.out.println ("3 - opzione 3");
        System.out.print(": ");
        Scanner inputopzione = new Scanner(System.in);
        switch (inputopzione.nextInt()) {
            case 1: System.out.println("opzione 1");
            System.out.println ("Scegli tra le seguenti opzioni:");
            System.out.println ("1 - opzione 1");
            System.out.println ("2 - opzione 2");
            System.out.println ("3 - opzione 3");
            switch (inputopzione.nextInt()) {
                case 1: System.out.println("opzione 1");
                System.out.println ("prova");
                break;
                case 2: System.out.println("opzione 2");
                System.out.println ("prova");
                break;
                case 3: System.out.println("opzione 3");
                System.out.println ("prova");
                break;
                default: System.out.println("Error");
                break;
            }
            break;
            case 2: System.out.println("opzione 2");
            System.out.println ("prova");
            break;
            case 3: System.out.println("opzione 3");
            System.out.println ("prova");
            break;
            default: System.out.println("Error");
            break;
        }
    }
}
Nel mio codice vecchio avevo fatto in questo modo:

Codice:
String InputOpzione =  JOptionPane.showInputDialog ("Inserisci una delle opzioni");
            switch (InputOpzione) {
                case "0":
                // istruzioni ed eventuali sotto switch
                break;
                case "1":
                // istruzioni ed eventuali sotto switch
                break;
                case "2":
                // istruzioni ed eventuali sotto switch
                break;
                default:
                // istruzioni
                break;
            }
Ma se è possibile sfruttare la textfield che hai posizionato in fondo alla finestra sarebbe ancora meglio

Ultima modifica di -Leo- : 16-01-2014 alle 14:15.
-Leo- è offline   Rispondi citando il messaggio o parte di esso
Old 16-01-2014, 17:37   #10
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Quote:
Originariamente inviato da -Leo- Guarda i messaggi
Figurati le tue modifiche al mio codice "abbozzato" sono sempre gradite. Comunque testandolo devo dire che lo scopo è quasi raggiunto, solo che non riesco a fare in modo di poter sfruttare gli input inseriti nel campo di scrittura in basso per navigare tra le opzioni.

Ad esempio: a schermo mi compare "scegli opzione 1,2,3", io digito "2", premo il bottone "Scrivi" e vengono eseguite le istruzioni in 2 e mostrati eventuali altri sottomenù a cui poter accedere sempre con gli input nella textfield in basso.
Quindi all'inserimento delle opzioni 1,2 o 3 vuoi compiere delle azioni differenti.
Domanda: e' necessaria questo tipo di interfaccia grafica?
Come ben sai il problema e' facilmente risolvibile mediante altre modalita': per esempio, un menu nella menu bar, una combo box invece del text field, dei bottoni posizionati nella tool bar, ....

Ho fatto quell'esempio perche' pensavo che il problema fosse gestire la JEditorPane/JTextPane, ma se desideri costruire un'interfaccia grafica per risolvere il problema in questione, forse e' meglio ripensarla usando menu' e/o bottoni.
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 16-01-2014, 18:25   #11
-Leo-
Member
 
Iscritto dal: Sep 2013
Messaggi: 85
Quote:
Originariamente inviato da sottovento Guarda i messaggi
Domanda: e' necessaria questo tipo di interfaccia grafica?
Nono va bene qualunque interfaccia permetta di ottenere lo scopo
-Leo- è offline   Rispondi citando il messaggio o parte di esso
Old 17-01-2014, 10:18   #12
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Quote:
Originariamente inviato da -Leo- Guarda i messaggi
Nono va bene qualunque interfaccia permetta di ottenere lo scopo
Scusa il ritardo, ma sto per essere trasferito un'altra volta, e stavolta in pieno deserto. Se non mi senti piu' e' a causa della connessione (i.e. dove vado non ci sono case ne' negozi, nulla. Solo sabbia) visto che dovro' affidarmi al cellulare.

Mi sono permesso di modificare il codice un'altra volta. A titolo di esempio, ho inserito una barra dei menu con un solo menu, contentente le 3 opzioni che ti interessano. Ho anche introdotto una combo box, cosi' vedi un altro modo di selezionare i dati. Avrei voluto anche inserire una toolbar, ma mi servirebbero 3 icone (possibilmente della stessa dimensione) e non so come pubblicarle sul forum.
Ad ogni modo, dacci un'occhiata e fammi sapere se e' quello che ti interessa.
Per inciso: esistono 1000 soluzioni al problema, ho cercato di presentare quella che secondo me e' piu' intuitiva e che piu' si adatta allo stile del programma che hai impostato.
ciau

Codice:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.text.*;

public class Prova implements ActionListener
{
    private SimpleAttributeSet formattazioneCorpo;
    private SimpleAttributeSet formattazioneTitolo;
    private StyledDocument stile;
    private JComboBox<String> cmbOptions;

    public Prova()
    {
        JFrame cornice = new JFrame("Simple Attributes");
        cornice.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);   // Sottovento
        Container contenitore = cornice.getContentPane();
        cornice.setSize(1000, 500);
        cornice.setVisible(true);
        //StyledDocument stile    = new DefaultStyledDocument();    Sottovento - commento per rimuovere

        JTextPane riquadroDiTesto = new JTextPane();
        //riquadroDiTesto.setEditable(false);
        stile    = riquadroDiTesto.getStyledDocument();

        JScrollPane scrollPane = new JScrollPane(riquadroDiTesto);
        contenitore.add(scrollPane, BorderLayout.CENTER);

        formattazioneTitolo = new SimpleAttributeSet();
        formattazioneTitolo.addAttribute(StyleConstants.CharacterConstants.Bold, Boolean.TRUE);
        formattazioneTitolo.addAttribute(StyleConstants.CharacterConstants.Italic, Boolean.TRUE);

        formattazioneCorpo = new SimpleAttributeSet();
        formattazioneCorpo.addAttribute(StyleConstants.CharacterConstants.Bold, Boolean.FALSE);
        formattazioneCorpo.addAttribute(StyleConstants.CharacterConstants.Italic, Boolean.FALSE);
        formattazioneCorpo.addAttribute(StyleConstants.CharacterConstants.Foreground, Color.lightGray);

        JPanel southPanel = new JPanel();
        GridBagLayout layout = new GridBagLayout();
        southPanel.setLayout(layout);
        JLabel lbl = new JLabel ("<html><body><Font color=red>Scegli tra le seguenti opzioni:0,1,2</font></body></html>");
        addBag(southPanel, layout, lbl, 0, 0, 0.0, 0.0, GridBagConstraints.NONE, 1, 1);

        String[] options = 
        {
            "Opzione 1",
            "Opzione 2",
            "Opzione 3"
        };
        cmbOptions = new JComboBox<> (options);
        cmbOptions.setActionCommand("ComboSelected");
        cmbOptions.addActionListener(this);

        addBag(southPanel, layout, cmbOptions, 1, 0, 1.0, 0.0, GridBagConstraints.HORIZONTAL, 1, 1);
        contenitore.add(southPanel, BorderLayout.SOUTH);

        try
        {
            stile.insertString(0,"Scegli tra le seguenti opzioni:\n", formattazioneCorpo);    // Sottovento - 0 invece di stile.getLength()
            stile.insertString(stile.getLength(),"0", formattazioneCorpo);
            stile.insertString(stile.getLength(),"1", formattazioneCorpo);
            stile.insertString(stile.getLength(),"2", formattazioneCorpo);
            stile.insertString(stile.getLength(),": \n", formattazioneCorpo);
        }
        catch(BadLocationException e)
        {
            e.printStackTrace(System.out);  // Sottovento - altrimenti non si puo' sapere se c'e' qualche problema...
        }
        addMenuBar(cornice);
    }

    // Aggiunge la barra a menu ed un menu contente le opzioni che ti interessano
    private void addMenuBar(JFrame cornice)
    {
        JMenuBar menuBar = new JMenuBar();
        JMenu menu       = new JMenu("Opzioni");

        JMenuItem item1  = new JMenuItem("Opzione 1");
        item1.setActionCommand("Option1");  /* Questa e' la stringa che identifica il comando */
        item1.addActionListener(this);
        menu.add(item1);

        JMenuItem item2  = new JMenuItem("Opzione 2");
        item2.setActionCommand("Option2");  /* Questa e' la stringa che identifica il comando */
        item2.addActionListener(this);
        menu.add(item2);

        JMenuItem item3  = new JMenuItem("Opzione 3");
        item3.setActionCommand("Option3");  /* Questa e' la stringa che identifica il comando */
        item3.addActionListener(this);
        menu.add(item3);

        menuBar.add(menu);
        cornice.setJMenuBar(menuBar);
    }

    private void addBag(JPanel panel, GridBagLayout layout, JComponent component, int gridx, int gridy, double weightx, double weighty, int fill, int gridWidth, int gridHeight)
    {
        GridBagConstraints limits   = new GridBagConstraints();
        limits.gridx                = gridx;
        limits.gridy                = gridy;
        limits.anchor               = GridBagConstraints.WEST;
        limits.insets.top           = 1;
        limits.insets.bottom        = 1;
        limits.insets.left          = 2;
        limits.insets.right         = 2;
        limits.weightx              = weightx;
        limits.weighty              = weighty;
        limits.fill                 = fill;
        limits.gridwidth            = gridWidth;
        limits.gridheight           = gridHeight;
        layout.setConstraints(component, limits);
        panel.add(component);
    }

    @Override
    public void actionPerformed (ActionEvent evt)
    {
        String command = evt.getActionCommand();
        if (command == null)
            return; /* Fai in modo che non accada mai! */
        try
        {
            switch (command)
            {
            case "Option1": /* Opzione 1 selezionata. Fai qualcosa qui! */ 
                stile.insertString(stile.getLength(),"Hai selezionato l'opzione 1\n", formattazioneCorpo);
                break;
            case "Option2": /* Opzione 2 selezionata. Fai qualcosa qui! */ 
                stile.insertString(stile.getLength(),"Ti ho visto, sai! Hai selezionato l'opzione 2\n", formattazioneCorpo);
                break;
            case "Option3": /* Opzione 3 selezionata. Fai qualcosa qui! */
                stile.insertString(stile.getLength(),"Allora e' un vizio! Hai selezionato l'opzione 3\n", formattazioneCorpo);
                break;
            case "ComboSelected":   /* Selezionato qualcosa al combo box */
                {
                    String selectedItem = (String)cmbOptions.getSelectedItem();
                    if (selectedItem != null)
                        stile.insertString(stile.getLength(), "Hai selezionato \"" + selectedItem + "\" dalla combo box\n", formattazioneCorpo);
                }
                break;
            }
        }
        catch(BadLocationException e)
        {
            e.printStackTrace(System.out);
            System.out.println ("Non posso portare a termine il comando a causa dell'eccezione " + e);
        }
    }

    public static void main(String args[])
    {
        SwingUtilities.invokeLater (new Runnable()
        {
            @Override
            public void run()
            {
                new Prova();
            }
        });
    }
}
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 17-01-2014, 15:16   #13
-Leo-
Member
 
Iscritto dal: Sep 2013
Messaggi: 85
Quote:
Originariamente inviato da sottovento Guarda i messaggi
Scusa il ritardo, ma sto per essere trasferito un'altra volta, e stavolta in pieno deserto. Se non mi senti piu' e' a causa della connessione (i.e. dove vado non ci sono case ne' negozi, nulla. Solo sabbia) visto che dovro' affidarmi al cellulare.
Figurati ci mancherebbe altro!
Il tuo codice funziona bene, solo che non capisco come fare ad entrare nei casi che ti evidenzio in rosso, visto che il caso che ti evidenzio in verde pare raccogliere tutte e tre i comandi:

Codice:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.text.*;

public class Prova implements ActionListener
{
    private SimpleAttributeSet formattazioneCorpo;
    private SimpleAttributeSet formattazioneTitolo;
    private StyledDocument stile;
    private JComboBox<String> cmbOptions;

    public Prova()
    {
        JFrame cornice = new JFrame("Simple Attributes");
        cornice.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);   // Sottovento
        Container contenitore = cornice.getContentPane();
        cornice.setSize(1000, 500);
        cornice.setVisible(true);
        //StyledDocument stile    = new DefaultStyledDocument();    Sottovento - commento per rimuovere

        JTextPane riquadroDiTesto = new JTextPane();
        //riquadroDiTesto.setEditable(false);
        stile    = riquadroDiTesto.getStyledDocument();

        JScrollPane scrollPane = new JScrollPane(riquadroDiTesto);
        contenitore.add(scrollPane, BorderLayout.CENTER);

        formattazioneTitolo = new SimpleAttributeSet();
        formattazioneTitolo.addAttribute(StyleConstants.CharacterConstants.Bold, Boolean.TRUE);
        formattazioneTitolo.addAttribute(StyleConstants.CharacterConstants.Italic, Boolean.TRUE);

        formattazioneCorpo = new SimpleAttributeSet();
        formattazioneCorpo.addAttribute(StyleConstants.CharacterConstants.Bold, Boolean.FALSE);
        formattazioneCorpo.addAttribute(StyleConstants.CharacterConstants.Italic, Boolean.FALSE);
        formattazioneCorpo.addAttribute(StyleConstants.CharacterConstants.Foreground, Color.lightGray);

        JPanel southPanel = new JPanel();
        GridBagLayout layout = new GridBagLayout();
        southPanel.setLayout(layout);
        JLabel lbl = new JLabel ("<html><body><Font color=red>Scegli tra le seguenti opzioni:0,1,2</font></body></html>");
        addBag(southPanel, layout, lbl, 0, 0, 0.0, 0.0, GridBagConstraints.NONE, 1, 1);

        String[] options = 
        {
            "Opzione 1",
            "Opzione 2",
            "Opzione 3"
        };
        cmbOptions = new JComboBox<> (options);
        cmbOptions.setActionCommand("ComboSelected");
        cmbOptions.addActionListener(this);

        addBag(southPanel, layout, cmbOptions, 1, 0, 1.0, 0.0, GridBagConstraints.HORIZONTAL, 1, 1);
        contenitore.add(southPanel, BorderLayout.SOUTH);

        try
        {
            stile.insertString(0,"Scegli tra le seguenti opzioni:\n", formattazioneCorpo);    // Sottovento - 0 invece di stile.getLength()
            stile.insertString(stile.getLength(),"0", formattazioneCorpo);
            stile.insertString(stile.getLength(),"1", formattazioneCorpo);
            stile.insertString(stile.getLength(),"2", formattazioneCorpo);
            stile.insertString(stile.getLength(),": \n", formattazioneCorpo);
        }
        catch(BadLocationException e)
        {
            e.printStackTrace(System.out);  // Sottovento - altrimenti non si puo' sapere se c'e' qualche problema...
        }
        addMenuBar(cornice);
    }

    // Aggiunge la barra a menu ed un menu contente le opzioni che ti interessano
    private void addMenuBar(JFrame cornice)
    {
        JMenuBar menuBar = new JMenuBar();
        JMenu menu       = new JMenu("Opzioni");

        JMenuItem item1  = new JMenuItem("Opzione 1");
        item1.setActionCommand("Option1");  /* Questa e' la stringa che identifica il comando */
        item1.addActionListener(this);
        menu.add(item1);

        JMenuItem item2  = new JMenuItem("Opzione 2");
        item2.setActionCommand("Option2");  /* Questa e' la stringa che identifica il comando */
        item2.addActionListener(this);
        menu.add(item2);

        JMenuItem item3  = new JMenuItem("Opzione 3");
        item3.setActionCommand("Option3");  /* Questa e' la stringa che identifica il comando */
        item3.addActionListener(this);
        menu.add(item3);

        menuBar.add(menu);
        cornice.setJMenuBar(menuBar);
    }

    private void addBag(JPanel panel, GridBagLayout layout, JComponent component, int gridx, int gridy, double weightx, double weighty, int fill, int gridWidth, int gridHeight)
    {
        GridBagConstraints limits   = new GridBagConstraints();
        limits.gridx                = gridx;
        limits.gridy                = gridy;
        limits.anchor               = GridBagConstraints.WEST;
        limits.insets.top           = 1;
        limits.insets.bottom        = 1;
        limits.insets.left          = 2;
        limits.insets.right         = 2;
        limits.weightx              = weightx;
        limits.weighty              = weighty;
        limits.fill                 = fill;
        limits.gridwidth            = gridWidth;
        limits.gridheight           = gridHeight;
        layout.setConstraints(component, limits);
        panel.add(component);
    }

    @Override
    public void actionPerformed (ActionEvent evt)
    {
        String command = evt.getActionCommand();
        if (command == null)
            return; /* Fai in modo che non accada mai! */
        try
        {
            switch (command)
            {
            case "Option1": /* Opzione 1 selezionata. Fai qualcosa qui! */ 
                stile.insertString(stile.getLength(),"Hai selezionato l'opzione 1\n", formattazioneCorpo);
                break;
            case "Option2": /* Opzione 2 selezionata. Fai qualcosa qui! */ 
                stile.insertString(stile.getLength(),"Ti ho visto, sai! Hai selezionato l'opzione 2\n", formattazioneCorpo);
                break;
            case "Option3": /* Opzione 3 selezionata. Fai qualcosa qui! */
                stile.insertString(stile.getLength(),"Allora e' un vizio! Hai selezionato l'opzione 3\n", formattazioneCorpo);
                break;
            case "ComboSelected":   /* Selezionato qualcosa al combo box */
                {
                    String selectedItem = (String)cmbOptions.getSelectedItem();
                    if (selectedItem != null)
                        stile.insertString(stile.getLength(), "Hai selezionato \"" + selectedItem + "\" dalla combo box\n", formattazioneCorpo);
                }
                break;
            }
        }
        catch(BadLocationException e)
        {
            e.printStackTrace(System.out);
            System.out.println ("Non posso portare a termine il comando a causa dell'eccezione " + e);
        }
    }

    public static void main(String args[])
    {
        SwingUtilities.invokeLater (new Runnable()
        {
            @Override
            public void run()
            {
                new Prova();
            }
        });
    }
}
Grazie delle correzioni e buona fortuna per il trasferimento in PostoDimenticatoDaDio!
-Leo- è offline   Rispondi citando il messaggio o parte di esso
Old 17-01-2014, 15:26   #14
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Entri nella zona rossa alla selezione di una voce dei menu.
Avrai notato che per ogni voce del menu' ho chiamato il metodo
setActionCommand() nel quale ho specificato il comando (cioe' la stringa inventata da me) che verra' ricevuto dal listener.
Un listener e' una classe che implementa l'interfaccia ActionListener, quindi che definisce il metodo actionPerformed().
Ogni item del menu puo' registrare un numero arbitrario di listener. Nel nostro caso, solo uno per voce (sempre lo stesso, la nostra classe principale).
Questa operazione e' fatta con addActionListener().

Alla selezione della voce al menu, i listener registrati verranno chiamati, o meglio verra' chiamata la loro actionPerformed(ActionEvent evt); in evt.getActionCommand() c'e' la stringa che e' stata precedentemente impostata.
E' piu' facile a farsi che a dirsi, spero che la mia descrizione sia abbastanza chiara...
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Wind Tre 'accende' il 5G Standalone in Italia: si apre una nuova era basata sui servizi Wind Tre 'accende' il 5G Standalone in Italia: s...
OPPO Find X9 Pro: il camera phone con teleobiettivo da 200MP e batteria da 7500 mAh OPPO Find X9 Pro: il camera phone con teleobiett...
DJI Romo, il robot aspirapolvere tutto trasparente DJI Romo, il robot aspirapolvere tutto trasparen...
DJI Osmo Nano: la piccola fotocamera alla prova sul campo DJI Osmo Nano: la piccola fotocamera alla prova ...
FUJIFILM X-T30 III, la nuova mirrorless compatta FUJIFILM X-T30 III, la nuova mirrorless compatta
Google Maps avrà una modalit&agra...
HONOR sta lavorando a uno smartphone con...
Thermaltake MAGFloe 360 Ultra ARGB Sync:...
Xiaomi 15T ora in super offerta su Amazo...
Si stringe il cerchio attorno a TP-Link ...
Amazon cambia i prezzi ancora una volta:...
Imperdibili i Google Pixel 10 a questi p...
Dyson OnTrac in super offerta su Amazon:...
Amazon: la nuova ondata di licenziamenti...
Questo portatile è un mostro: MSI...
Apple Watch Series 11 GPS + Cellular cro...
JBL Clip 5 in forte sconto su Amazon: lo...
Il nuovo top di gamma compatto di OnePlu...
Cresce il divario tra dispositivi elettr...
La missione con equipaggio Shenzhou-21 h...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 04:14.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v