即使它是一种有效的方法,JComboBox#setVisible也不会隐藏我的JComboBox. 难道我做错了什么?如果没有,是否有任何替代方案?
			
			4730 次
		
3 回答
            2        
        
		
由于您对发布SSCCE没有表现出任何兴趣,因此这是我的,表明您所说的内容是错误的,在您发布代码之前什么都做不了。
这对我来说很好,
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);
        }
    }
}
于 2012-05-12T15:59:40.077   回答
    
    
            1        
        
		
甚至不确定我为什么要花时间创建SSCCE,但是这段代码可以按预期工作。我建议您将其与您的代码进行比较并寻找差异
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 );
      }
    } );
  }
}
于 2012-05-12T15:58:50.670   回答
    
    
            1        
        
		
在您发布代码之前,没有人可以回答您的问题。但是,对于“替代方案”的问题,我会回答。
- 您可以使用“setEnabled(false)”禁用它 
- 如果它在 JPanel 内,您可以使用“remove()”方法和该方法的其他重载版本将其删除 
- 您也许可以使用“setEditable(false)”将其设置为不可编辑。反正我还没试过 
于 2012-05-12T17:27:25.863   回答