2017-05-10 1 views
0

Je créais un programme pour travailler avec une liste déroulante, mais je suis resté coincé à la ligne de déclaration de la boîte JComboBox, je reçois ces messages d'erreur: Plusieurs marqueurs à cette ligne - Le constructeur JComboBox (String [] undefined - Point de rupture de ligne: JComboBox [ligne: 25] - JComboBox() Peu importe comment j'essaie de définir JComboBox, j'obtiens une sorte d'erreur. Je vous prie aider moi avec ceci.Comment déclarer un JComboBox?

Voici le code de la classe publique:

import javax.swing.*; 
    import java.awt.FlowLayout; 
    import java.awt.Font; 
    import javax.swing.JFrame; 
    import javax.swing.JTextField; 
    import javax.swing.JRadioButton; 
    import javax.swing.ButtonGroup; 
    import java.awt.event.ItemListener; 
    import java.awt.event.ItemEvent; 

    public class JComboBox extends JFrame { 

     private JComboBox box; 
     private JLabel picture; 

     private static String[] filename = { "p.png", "i.png" }; 
     private Icon pics[] = { new ImageIcon(getClass().getResource(filename[0])), 
       new ImageIcon(getClass().getResource(filename[1])) }; 

     public JComboBox() { 

      super("This is the title"); 
      setLayout(new FlowLayout()); 

      JComboBox box = new JComboBox(filename); 

      box.addItemListener(new ItemListener() { 
       public void itemStateChanged(ItemEvent event) { 
        if (event.getStateChange() == ItemEvent.SELECTED) { 
         picture.setIcon(pics[box.getSelectedIndex()]); 
        } 
       } 
      }); 

      add(box); 
      picture = new JLabel(pics[0]); 
      add(picture); 

     } 

    } 

Et voici le code de la classe principale:

import javax.swing.*; 

    public class JComboBox1 extends JFrame { 

     public static void main(String[] args) { 


      JComboBox Box = new JComboBox(); 
      Box.setVisible(true); 
      Box.setSize(400,400); 
      Box.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     } 

    } 

Merci.

+2

Vous avez un slogan avec la classe Swing existante [javax.swing.JComboBox] (https://docs.oracle.com/javase/8/docs/api/javax/swing/JComboBox.html) que vous avez importée avec 'import javax.swing. *'. Essayez de changer le nom de la classe. –

+0

Merci! Cela a réglé mon problème. J'aurais dû savoir mieux, haha. –

Répondre

0

Votre problème, comme @Andy mentionné est que vous avez une collision dans le nom de votre classe et le composant swing. Si vous devez absolument le nom de votre classe JComboBox vous devrez référencer le composant swing par le nom complet, en tant que telle

public class JComboBox extends JFrame { 

    private javax.swing.JComboBox box; 

Si vous passez la souris sur votre instance privée avec un IDE, vous devriez voir le entièrement qualifié nom correspondant au paquet dans lequel vous avez créé votre classe JComboBox. Sauvez-vous de la douleur et renommez votre classe.

+0

Je suppose que c'est insuffisant. Probablement aurait besoin de se débarrasser de 'import javax.swing. *' Aussi bien. La meilleure réponse est * ne faites pas cela. * Ne nommez pas une classe exactement comme une classe de bibliothèque standard. Évitez même d'utiliser le préfixe que Swing utilise pour distinguer ses classes. C'est déroutant, et vous coûtera du temps et du chagrin. –

+0

Je préfère toujours être explicite avec les importations, mais c'est juste ma préférence. Ce qui précède était juste pour donner un peu plus de perspicacité sur ce qui se passe, mais oui, je suis d'accord avec vous dans le fait que 'ne faites pas cela' est la meilleure réponse. :) – Floresj4

+0

J'ai réussi à le réparer juste en renommant la classe. J'aurais dû savoir mieux, cette erreur est aussi novice que possible. Merci à tous! –