-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

コードを投稿するまで、誰もあなたの質問に答えることはできません。ただし、「代替手段」の質問についてはお答えします。

  1. 「setEnabled(false)」を使用して無効にすることができます

  2. JPanel 内にある場合は、「remove()」メソッドとそのメソッドの他のオーバーロードされたバージョンを使用して削除できます。

  3. 「setEditable(false)」を使用して編集不可に設定できる場合があります。とにかくまだ試していない

于 2012-05-12T17:27:25.863 に答える
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 に答える