-1

即使它是一种有效的方法,JComboBox#setVisible也不会隐藏我的JComboBox. 难道我做错了什么?如果没有,是否有任何替代方案?

4

3 回答 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

在您发布代码之前,没有人可以回答您的问题。但是,对于“替代方案”的问题,我会回答。

  1. 您可以使用“setEnabled(false)”禁用它

  2. 如果它在 JPanel 内,您可以使用“remove()”方法和该方法的其他重载版本将其删除

  3. 您也许可以使用“setEditable(false)”将其设置为不可编辑。反正我还没试过

于 2012-05-12T17:27:25.863 回答