2012-05-12 2 views
-1

Même si c'est une méthode valide, JComboBox#setVisible ne cache pas mon JComboBox. Est-ce que je fais quelque chose de mal? Si non, y a-t-il des alternatives?JCombobox.setVisible (false);

+5

* "Est-ce que je fais quelque chose de mal?" * Oui. Pour une meilleure (ou toute) aide plus tôt, postez un [SSCCE] (http://sscce.org/). –

+1

Cette méthode fonctionne comme prévu – Robin

+0

_Ecce vis de [sscce] (http://sscce.org/) infra! _ – trashgod

Répondre

2

Puisque vous ne présentez aucun intérêt à l'affichage d'une SSCCE, voici le mien montre que ce que vous avez déclaré en question est fausse et ne peut rien faire jusqu'à ce que vous publiez votre code.

Cela fonctionne bien pour moi,

import java.awt.FlowLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.JButton; 
import javax.swing.JComboBox; 
import javax.swing.JFrame; 
import javax.swing.SwingUtilities; 

public class FrameTest extends JFrame implements ActionListener { 

    JComboBox test; 

    public FrameTest() { 
     setLayout(new FlowLayout()); 
     setSize(550, 100); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     JButton hideJCombo = new JButton("Hide my JCombobox!"); 
     JButton showJCombo = new JButton("Show my JCombobox!"); 

     String course[] = {"This", "is", "a", "sample", "for", "StackOverflow"}; 
     test = new JComboBox(course); 

     add(hideJCombo); 
     add(test); 
     add(showJCombo); 


     hideJCombo.setActionCommand("hide"); 
     showJCombo.setActionCommand("show"); 

     hideJCombo.addActionListener(this); 
     showJCombo.addActionListener(this); 

    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       new FrameTest().setVisible(true); 

      } 
     }); 
    } 

    @Override 
    public void actionPerformed(ActionEvent e) { 

     if ("hide".equals(e.getActionCommand())) { 
      test.setVisible(false); 
      System.out.println("hide"); 
     } else if ("show".equals(e.getActionCommand())) { 
      test.setVisible(true); 
     } 

    } 
} 
1

Je ne sais même pas pourquoi j'ai passé du temps à créer le SSCCE, mais ce code fonctionne comme prévu. Je vous suggère de le comparer avec votre code et de rechercher des différences

import javax.swing.JCheckBox; 
import javax.swing.JComboBox; 
import javax.swing.JFrame; 
import java.awt.BorderLayout; 
import java.awt.EventQueue; 
import java.awt.event.ItemEvent; 
import java.awt.event.ItemListener; 

public class ComboboxDemo { 
    private static JFrame createFrame(){ 
    JFrame result = new JFrame("ComboboxDemo"); 

    final JComboBox<String> combobox = createCombobox(); 
    result.add(combobox, BorderLayout.CENTER); 

    JCheckBox toggleVisibility = new JCheckBox("Toggle visibility"); 
    toggleVisibility.setSelected(combobox.isVisible()); 
    toggleVisibility.addItemListener(new ItemListener() { 
     @Override 
     public void itemStateChanged(ItemEvent e) { 
     combobox.setVisible(e.getStateChange() == ItemEvent.SELECTED); 
     } 
    }); 
    result.add(toggleVisibility, BorderLayout.SOUTH); 

    result.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    result.pack(); 
    return result; 
    } 

    private static JComboBox<String> createCombobox(){ 
    return new JComboBox<>(new String[]{"foo", "bar", "StackOverflow", "Hello World"}); 
    } 

    public static void main(String[] args) { 
    EventQueue.invokeLater(new Runnable() { 
     @Override 
     public void run() { 
     createFrame().setVisible(true); 
     } 
    }); 
    } 
} 
1

Personne ne peut répondre à votre question jusqu'à ce que vous postez le code. Cependant, pour la question des "Alternatives", je vais répondre.

  1. Vous pouvez le désactiver en utilisant la méthode "SetEnabled (false)"

  2. Si elle se trouve dans un JPanel, vous pouvez le supprimer en utilisant "remove()" et d'autres versions surchargées de cette méthode

  3. Vous pouvez utiliser "setEditable (false)" pour le définir comme non modifiable. Je ne l'ai pas encore essayé de toute façon

Questions connexes