-
Bug
-
Resolution: Cannot Reproduce
-
P4
-
None
-
1.4.1
-
x86
-
windows_2000
Name: jk109818 Date: 10/14/2002
FULL PRODUCT VERSION :
java version "1.4.1"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.1-b21)
Java HotSpot(TM) Client VM (build 1.4.1-b21, mixed mode)
FULL OPERATING SYSTEM VERSION :
Microsoft Windows 2000 [Version 5.00.2195]
service pack 3 installed.
A DESCRIPTION OF THE PROBLEM :
JComboBox has a property: prototypeDisplayValue.
When set, it will not step through every element in the
list to find a proper size.
However, When the drop-down list is first activated (press
the down arrow", the list does walk through every element,
ostensibly to determine a size. it seems to me that
ComboBox.prototypeDisplayValue should be passed on to the
list.prototypeCellValue, so the list is truely not iterated
for size - ever.
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
1. Please see the attached source code for an example
EXPECTED VERSUS ACTUAL BEHAVIOR :
setPrototypeDisplayValue("MMMMMMMM");
Expected Results:
List is not iterated for size -ever.
Actual results:
List is iterated for size for the internal list.
ERROR MESSAGES/STACK TRACES THAT OCCUR :
N/A - No Errors are given.
REPRODUCIBILITY :
This bug can be reproduced always.
---------- BEGIN SOURCE ----------
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class ComboProblemPanel extends JPanel
{
JComboBox jComboBox1 = new JComboBox();
public ComboProblemPanel()
{
try
{
jbInit();
}
catch(Exception ex)
{
ex.printStackTrace();
}
}
void jbInit() throws Exception
{
jComboBox1.setPrototypeDisplayValue("WWWWWWWW");
jComboBox1.setModel(new ShowProblemComboBoxModel());
this.add(jComboBox1);
}
public static void main(String[] args)
{
try
{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}
catch(Exception e)
{
e.printStackTrace();
}
JFrame frame = new JFrame() {
protected void processWindowEvent(WindowEvent e)
{
super.processWindowEvent(e);
if (e.getID() == WindowEvent.WINDOW_CLOSING)
{
System.exit(0);
}
}
};
frame.setSize(new Dimension(200,200));
frame.validate();
//Center the window
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
Dimension frameSize = frame.getSize();
if (frameSize.height > screenSize.height)
{
frameSize.height = screenSize.height;
}
if (frameSize.width > screenSize.width)
{
frameSize.width = screenSize.width;
}
frame.setLocation((screenSize.width - frameSize.width) / 2,
(screenSize.height - frameSize.height) / 2);
frame.getContentPane().add(new ComboProblemPanel());
frame.setVisible(true);
//Overridden so we can exit when window is closed
}
}
class ShowProblemComboBoxModel extends DefaultComboBoxModel {
private static final String[] strings =
{"A","B","C","D","E","F","G","H","I","J","K",
"L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z
"};
public ShowProblemComboBoxModel() {
super(strings);
}
public Object getElementAt(int index) {
System.out.println("getElementAt has been called! "+index);
return super.getElementAt(index);
}
}
---------- END SOURCE ----------
CUSTOMER WORKAROUND :
A work-around is possible, but complicated, as it gets into
the pluggable L&F. We will be implementing a work-around,
but have not done so yet.
(Review ID: 165773)
======================================================================
FULL PRODUCT VERSION :
java version "1.4.1"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.1-b21)
Java HotSpot(TM) Client VM (build 1.4.1-b21, mixed mode)
FULL OPERATING SYSTEM VERSION :
Microsoft Windows 2000 [Version 5.00.2195]
service pack 3 installed.
A DESCRIPTION OF THE PROBLEM :
JComboBox has a property: prototypeDisplayValue.
When set, it will not step through every element in the
list to find a proper size.
However, When the drop-down list is first activated (press
the down arrow", the list does walk through every element,
ostensibly to determine a size. it seems to me that
ComboBox.prototypeDisplayValue should be passed on to the
list.prototypeCellValue, so the list is truely not iterated
for size - ever.
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
1. Please see the attached source code for an example
EXPECTED VERSUS ACTUAL BEHAVIOR :
setPrototypeDisplayValue("MMMMMMMM");
Expected Results:
List is not iterated for size -ever.
Actual results:
List is iterated for size for the internal list.
ERROR MESSAGES/STACK TRACES THAT OCCUR :
N/A - No Errors are given.
REPRODUCIBILITY :
This bug can be reproduced always.
---------- BEGIN SOURCE ----------
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class ComboProblemPanel extends JPanel
{
JComboBox jComboBox1 = new JComboBox();
public ComboProblemPanel()
{
try
{
jbInit();
}
catch(Exception ex)
{
ex.printStackTrace();
}
}
void jbInit() throws Exception
{
jComboBox1.setPrototypeDisplayValue("WWWWWWWW");
jComboBox1.setModel(new ShowProblemComboBoxModel());
this.add(jComboBox1);
}
public static void main(String[] args)
{
try
{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}
catch(Exception e)
{
e.printStackTrace();
}
JFrame frame = new JFrame() {
protected void processWindowEvent(WindowEvent e)
{
super.processWindowEvent(e);
if (e.getID() == WindowEvent.WINDOW_CLOSING)
{
System.exit(0);
}
}
};
frame.setSize(new Dimension(200,200));
frame.validate();
//Center the window
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
Dimension frameSize = frame.getSize();
if (frameSize.height > screenSize.height)
{
frameSize.height = screenSize.height;
}
if (frameSize.width > screenSize.width)
{
frameSize.width = screenSize.width;
}
frame.setLocation((screenSize.width - frameSize.width) / 2,
(screenSize.height - frameSize.height) / 2);
frame.getContentPane().add(new ComboProblemPanel());
frame.setVisible(true);
//Overridden so we can exit when window is closed
}
}
class ShowProblemComboBoxModel extends DefaultComboBoxModel {
private static final String[] strings =
{"A","B","C","D","E","F","G","H","I","J","K",
"L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z
"};
public ShowProblemComboBoxModel() {
super(strings);
}
public Object getElementAt(int index) {
System.out.println("getElementAt has been called! "+index);
return super.getElementAt(index);
}
}
---------- END SOURCE ----------
CUSTOMER WORKAROUND :
A work-around is possible, but complicated, as it gets into
the pluggable L&F. We will be implementing a work-around,
but have not done so yet.
(Review ID: 165773)
======================================================================