即使它是一种有效的方法,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 回答