2005-09-15 Lillian Angel <[EMAIL PROTECTED]>
* javax/swing/plaf/basic/BasicComboBoxRenderer.java
(getListCellRendererComponent): Added code in to check if string
is larger than comboBox. If it is, the string is truncated and
'...' is drawn at the end of it.
* javax/swing/plaf/basic/BasicComboBoxUI.java
(getDefaultSize): Initially too small, still not fully
implemented.
(getLargestItemSize): Made private, not in API.
(minimumLayoutSize): Implemented properly.
(intervalAdded): ComboBox should not be resized with every new
component. This is fixed.
Index: javax/swing/plaf/basic/BasicComboBoxRenderer.java
===================================================================
RCS file: /cvsroot/classpath/classpath/javax/swing/plaf/basic/BasicComboBoxRenderer.java,v
retrieving revision 1.4
diff -u -r1.4 BasicComboBoxRenderer.java
--- javax/swing/plaf/basic/BasicComboBoxRenderer.java 2 Jul 2005 20:32:50 -0000 1.4
+++ javax/swing/plaf/basic/BasicComboBoxRenderer.java 15 Sep 2005 19:51:33 -0000
@@ -40,12 +40,16 @@
import java.awt.Component;
import java.awt.Dimension;
+import java.awt.FontMetrics;
import java.io.Serializable;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.ListCellRenderer;
import javax.swing.SwingConstants;
+import javax.swing.SwingUtilities;
import javax.swing.UIDefaults;
import javax.swing.UIManager;
import javax.swing.border.Border;
@@ -100,7 +104,28 @@
boolean cellHasFocus)
{
String s = value.toString();
- setText(s);
+
+ // String maybe larger than comboBox.
+ FontMetrics fm = getToolkit().getFontMetrics(list.getFont());
+ int strWidth = SwingUtilities.computeStringWidth(fm, s);
+ int cbWidth = getSize().width;
+ if (cbWidth != 0 && strWidth > cbWidth)
+ {
+ char[] str = s.toCharArray();
+ int currWidth = 0;
+ int i = 0;
+ String postStr = "... ";
+ cbWidth -= SwingUtilities.computeStringWidth(fm, postStr);
+ while (i < str.length && currWidth < cbWidth)
+ {
+ ++i;
+ currWidth = SwingUtilities.computeStringWidth(fm, new String(str, 0, i));
+ }
+ setText(new String(str, 0, i) + postStr);
+ }
+ else
+ setText(s);
+
setOpaque(true);
UIDefaults defaults = UIManager.getLookAndFeelDefaults();
Index: javax/swing/plaf/basic/BasicComboBoxUI.java
===================================================================
RCS file: /cvsroot/classpath/classpath/javax/swing/plaf/basic/BasicComboBoxUI.java,v
retrieving revision 1.11
diff -u -r1.11 BasicComboBoxUI.java
--- javax/swing/plaf/basic/BasicComboBoxUI.java 13 Sep 2005 21:10:50 -0000 1.11
+++ javax/swing/plaf/basic/BasicComboBoxUI.java 15 Sep 2005 19:51:33 -0000
@@ -844,7 +844,8 @@
*/
protected Dimension getDefaultSize()
{
- return new Dimension(6, 17);
+ // FIXME: Not implemented properly.
+ return new Dimension(100, 20);
}
/**
@@ -853,7 +854,7 @@
*
* @return dimensions of the largest item in the combo box.
*/
- protected Dimension getLargestItemSize()
+ private Dimension getLargestItemSize()
{
ComboBoxModel model = comboBox.getModel();
int numItems = model.getSize();
@@ -962,7 +963,26 @@
public Dimension minimumLayoutSize(Container parent)
{
- return preferredLayoutSize(parent);
+ Dimension minSize = getDefaultSize();
+ ComboBoxModel model = comboBox.getModel();
+ int numItems = model.getSize();
+
+ if (numItems == 0)
+ return minSize;
+
+ ListCellRenderer renderer = comboBox.getRenderer();
+
+ for (int i = 0; i < numItems; i++)
+ {
+ Object item = model.getElementAt(i);
+ String s = item.toString();
+ Component comp = renderer.getListCellRendererComponent(listBox, item,
+ -1, false, false);
+
+ if (comp.getPreferredSize().width < minSize.width)
+ minSize = comp.getMinimumSize();
+ }
+ return minSize;
}
/**
@@ -1105,25 +1125,17 @@
*/
public void intervalAdded(ListDataEvent e)
{
- // must determine if the size of the combo box should change
- int start = e.getIndex0();
- int end = e.getIndex1();
-
ComboBoxModel model = comboBox.getModel();
ListCellRenderer renderer = comboBox.getRenderer();
if (largestItemSize == null)
- largestItemSize = new Dimension(0, 0);
+ largestItemSize = getLargestItemSize();
+ if (largestItemSize.width < getDefaultSize().width)
+ largestItemSize.width = getDefaultSize().width;
+ if (largestItemSize.height < getDefaultSize().height)
+ largestItemSize.height = getDefaultSize().height;
- for (int i = start; i < end; i++)
- {
- Object item = model.getElementAt(i);
- Component comp = renderer.getListCellRendererComponent(new JList(),
- item, -1,
- false, false);
- if (comp.getPreferredSize().getWidth() > largestItemSize.getWidth())
- largestItemSize = comp.getPreferredSize();
- }
+ comboBox.repaint();
}
/**
_______________________________________________
Classpath-patches mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/classpath-patches