Visualizzazione dei risultati da 1 a 10 su 10

Discussione: [Java] JComboBox

  1. #1
    Utente di HTML.it L'avatar di HaCk88
    Registrato dal
    May 2005
    Messaggi
    193

    [Java] JComboBox

    Salve ragazzi quando eseguo il codice seguente:
    codice:
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    public class ComboBox extends BaseFrame implements ActionListener {
    JLabel label;
    ComboBox() {
    label = new JLabel("Seleziona quanti anni hai altrimenti inseriscilo manualmente");
    String[] valori = new String[] {"Quindici", "Sedici", "Diaciasette", "Diciotto"};
    JComboBox box = new JComboBox(valori);
    box.setEditable(true);
    box.addActionListener(this);
    JPanel panel = new JPanel(new GridLayout(2,2));
    panel.add(label);
    panel.add(box);
    panel.setPreferredSize(new Dimension(200, 300));
    this.add(panel);
    this.pack();
    }
    public void actionPerformed(ActionEvent e) {
    if(e.getSource() instanceof JComboBox) {
    JComboBox item = (JComboBox)e.getSource();
    String value = null;
    if(item.getSelectedIndex() > -1) {
    value = (String)item.getSelectedItem();
    } else {
    value = item.getEditor().getItem().toString();
    }
    label.setText(String.format("Anni: %s", value));
    }
    }
    public static void main(String[] args) {
    new ComboBox();
    }
    }
    non mi da nessun errore di compilazione ma quando lo avvio si vede una finestra tutta bianca non riesco proprio a capire il perchè .
    Cosa sbaglio? :master:

    Inoltre il contenuto di BaseFrame è il seguente:


    codice:
    import javax.swing.*;
    import java.awt.*;
    
    /**
     * Implementazione di base JFrame che definisce delle impostazioni
     */
    public class BaseFrame extends JFrame {
    
       BaseFrame() {
          super();
    
          this.setTitle("Componenti Swing");
          this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
          this.setSize(1280, 1024);
    
          this.setVisible(true);
       }
    }
    Grazie

  2. #2
    Utente di HTML.it L'avatar di HaCk88
    Registrato dal
    May 2005
    Messaggi
    193
    Bhe nessuno??

  3. #3
    Utente di HTML.it L'avatar di provasp
    Registrato dal
    Sep 2002
    Messaggi
    160
    Secondo me devi usare "setContentPane" per aggiungere il pannello principale...

  4. #4
    Utente di HTML.it L'avatar di HaCk88
    Registrato dal
    May 2005
    Messaggi
    193
    Originariamente inviato da provasp
    Secondo me devi usare "setContentPane" per aggiungere il pannello principale...
    Cos'è???

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Dopo 5 minuti di prove intense ho capito: c'è un conflitto di nomi!!
    In AWT esiste già una classe chiamata ComboBox... quindi nel main viene creato un oggetto di quel tipo (o comunque va in confusione)... cambia nome alla classe, scegli qualcosa di diverso da ComboBox.

    Poi ti posso consigliare di utilizzare una struttura diversa per l'implementazione delle tue classi: tutti gli elementi grafici, specialmente se devono essere utilizzati dal programma in modo diretto, andrebbero dichiarati a livello di classe e non nel costruttore:
    codice:
    public class MiaClasse {
    
       // Dichiarazione degli elementi
       private JLabel label;
       private JComboBox box;
       private JPanel panel;
       ...
    
       public MiaClasse() {
    
          // Nel costruttore istanzio gli oggetti
          label = new JLabel(...);
          box = new JComboBox(...);
          panel = new JPanel(...);
          ...
       }
       ...
    }
    Infine, utilizza getContentPane().add() per aggiungere gli oggetti.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  6. #6
    Utente di HTML.it L'avatar di HaCk88
    Registrato dal
    May 2005
    Messaggi
    193
    Siiiiiiiii Funzionaaaaaaa
    Grazie Lele mi stava scoppiano la testa
    Provavo e riprovavo ma niente
    Comunque ora funziona.
    Ma il problema della disposizione degli oggetti grafici persiste ancora
    Comunque se mi fate un esempio su questo programma con gli oggetti grafici ben disposti cercherò di capirci qualcosa :master:
    Io ho provato con GridLayout ma niente la ComboBox mi viene gigante

    Grazie

  7. #7
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    E' proprio per la scelta del LayoutManager GridLayout che la combobox viene gigante.

    Prova ad utilizzare un FlowLayout, ad esempio, e le cose cambieranno.
    Esempietto:
    codice:
    import javax.swing.*;
    import java.awt.*;
    
    public class Prova extends JFrame {
    
       private JComboBox jcb;
       private JLabel lbl;
       private String [] valori = {"Uno", "Due"};
    
       public Prova() {
          getContentPane().setLayout( new FlowLayout(FlowLayout.LEADING) );
          jcb = new JComboBox( valori );
          lbl = new JLabel("Scegli");
          getContentPane().add(lbl);
          getContentPane().add(jcb);
          setSize(800, 600);
          setTitle("Titolo");
          setDefaultCloseOperation(EXIT_ON_CLOSE);
          setVisible(true);
       }
    
       public static void main(String [] a) {
          Prova p = new Prova();
       }
    }
    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  8. #8
    Utente di HTML.it L'avatar di HaCk88
    Registrato dal
    May 2005
    Messaggi
    193
    Scusami Lele ma percaso conosci una guida sui layout??? però in italiano possibilmente Ti sarei molto grato

    Grazie

  9. #9
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Fai riferimento al libro MokaBook di MokaByte: www.mokabyte.it
    Se non sei già registrato, puoi farlo gratuitamente. Una volta registrato puoi scaricare l'intero libro, capitolo per capitolo. Nel libro vengono trattati, ovviamente, anche i LayoutManager. Gli autori sono italiani, quindi il libro è interamente in Italiano e non, come spesso accade, una semplice traduzione.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  10. #10
    Utente di HTML.it L'avatar di HaCk88
    Registrato dal
    May 2005
    Messaggi
    193
    Grazie mille!!


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