-
Bug
-
Resolution: Fixed
-
P4
-
1.2.0
-
beta
-
x86
-
windows_nt
Name: dbT83986 Date: 01/10/99
The very first time the popup menu for a JCombobox is mapped,
regardless of the Look&Feel, the bottom one or two pixels are
missing. After the first time the menu is drawn correctly.
The following code will demonstrate the problem:
//~~~~~~~~~~~~~~~~~~~~~~~~ cut here ~~~~~~~~~~~~~~~~~~~~~~~~~~
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class comboboxBug extends JPanel {
static JFrame frame;
static String metal= "Metal";
static String metalClassName = "javax.swing.plaf.metal.MetalLookAndFeel";
static String motif = "Motif";
static String motifClassName =
"com.sun.java.swing.plaf.motif.MotifLookAndFeel";
static String windows = "Windows";
static String windowsClassName =
"com.sun.java.swing.plaf.windows.WindowsLookAndFeel";
JRadioButton metalButton, motifButton, windowsButton;
public comboboxBug() {
String fruitChoices[] = {"Apple", "Banana", "Cherry", "Fig", "Grape", "Watermelon"};
JComboBox fruits = new JComboBox(fruitChoices);
fruits.setMaximumRowCount(4);
metalButton = new JRadioButton(metal);
metalButton.setActionCommand(metalClassName);
motifButton = new JRadioButton(motif);
motifButton.setActionCommand(motifClassName);
windowsButton = new JRadioButton(windows);
windowsButton.setActionCommand(windowsClassName);
// Group the radio buttons.
ButtonGroup group = new ButtonGroup();
group.add(metalButton);
group.add(motifButton);
group.add(windowsButton);
// Register a listener for the radio buttons.
RadioListener myListener = new RadioListener();
metalButton.addActionListener(myListener);
motifButton.addActionListener(myListener);
windowsButton.addActionListener(myListener);
add(fruits);
add(metalButton);
add(motifButton);
add(windowsButton);
}
/** An ActionListener that listens to the radio buttons. */
class RadioListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
String lnfName = e.getActionCommand();
try {
UIManager.setLookAndFeel(lnfName);
SwingUtilities.updateComponentTreeUI(frame);
frame.pack();
}
catch (Exception exc) {
JRadioButton button = (JRadioButton)e.getSource();
button.setEnabled(false);
updateState();
System.err.println("Could not load LookAndFeel: " + lnfName);
}
}
}
public void updateState() {
String lnfName = UIManager.getLookAndFeel().getClass().getName();
if (lnfName.indexOf(metal) >= 0) {
metalButton.setSelected(true);
} else if (lnfName.indexOf(windows) >= 0) {
windowsButton.setSelected(true);
} else if (lnfName.indexOf(motif) >= 0) {
motifButton.setSelected(true);
} else {
System.err.println("SimpleExample is using an unknown L&F: " + lnfName);
}
}
public static void main(String s[]) {
comboboxBug panel = new comboboxBug();
frame = new JFrame("Combobox Menu Bug");
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {System.exit(0);}
});
frame.getContentPane().add(panel);
frame.pack();
frame.setVisible(true);
panel.updateState();
}
}
(Review ID: 52358)
======================================================================