-
Bug
-
Resolution: Duplicate
-
P3
-
None
-
1.4.0
-
generic
-
windows_nt
Name: jbT81659 Date: 10/15/2001
Description: OS: Windows 2000,
JDK:jdk1.4.0-beta3-b83 (Merlin-Beta3)
Test case: jTable.java
Pressing "CRTL+SHIFT+O" on a JTable cell that contains RTL ONLY text causes
that RTL text to disappear.
If the JTable cell include RTL text like arabic or hebrew alone without any LTR text,
then this text dissapears upon opening the cell for editing and pressing "CTRL+SHIFT+O"
to change the text Component orientation.
This behavior is verified under windows 2000 but not under Solaris sparc and Redhat Linux.
If LTR text is added to the RTL text, pressing "CTRL+SHIFT+O" does not cause RTL text
to disappear.
To reproduce this problem:
1- Compile and run the following test case jTable.java
2- Verify that each cell in the first column (from the left) contain one RTL (arabic) word
3- Double click on any cell in this column
4- Verify that the RTL (arabic) word is displayed
5- Press "CTRL+SHIFT+O"
6- Verify that the word is not displayed on the right end of cell
7- Verify that spaces have replaced actual glyphs of the RTL word
8- Verify that cursor is displayed at the end of these spaces
9- Press "CTRL+SHIFT+O" again
10- Verify that the word is displayed
11- Press "CTRL+SHIFT+O" again
12- add any LTR character(s) to the cell.
13- Verify that RTL word is displayed once first LTR char is added
14- Press "CTRL+SHIFT+O" again
15- Verify that the RTL word and the LTR char(s) are displayed
============Code======================
/*
$Header: $
*/
import java.awt.*;
import javax.swing.*;
import javax.swing.table.*;
import javax.swing.border.*;
import java.util.*;
import java.awt.event.*;
public class jTable
{
TableColumn cColumn, vColumn, nColumn;
TableModel dataModel;
JTable tableView;
JComboBox comboBox;
public jTable()
{
JFrame frame = new JFrame("JTable Example");
frame.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e) {System.exit(0);}});
final String[] names = { "Header1", "Header2", "Header3", "Header4" };
final Object[][] data =
{
{
"\u0645\u062b\u0627\u0644",
"\u05e9\u05e0\u05d4\u0020\u05d9\u05e4\u05d4",
"\u0069\u0073\u0020\u0067\u0072\u0065\u0065\u006e",
new Integer(2), new Boolean(true)
},
{
"\u0645\u062b\u0627\u0644",
"\u05d6\u05d5\u0020\u05e9\u05e0\u05d4\u0020\u05d9\u05e4\u05d4",
"\u0661\u0669\u0665\u0668\u0020\u0031\u0039\u0035\u0038",
new Integer(99),
new Boolean(false)
},
{
"\u0645\u062b\u0627\u0644",
"\u05d6\u05d5\u0020\u05e9\u05e0\u05d4\u0020\u05d9\u05e4\u05d4",
"Green", new Integer(838), new Boolean(false)
},
{
"\u0645\u062b\u0627\u0644",
"\u05d6\u05d5\u0020\u05e9\u05e0\u05d4\u0020\u05d9\u05e4\u05d4",
"\u0661\u0669\u0665\u0668\u0020\u0031\u0039\u0035\u0038",
new Integer(8),
new Boolean(true)
},
{
"\u0645\u062b\u0627\u0644",
"\u05d6\u05d5\u0020\u05e9\u05e0\u05d4\u0020\u05d9\u05e4\u05d4",
"\u0661\u0669\u0665\u0668\u0020\u0031\u0039\u0035\u0038",
new Integer(3),
new Boolean(false)
},
{
"\u0645\u062b\u0627\u0644",
"\u05d6\u05d5\u0020\u05e9\u05e0\u05d4\u0020\u05d9\u05e4\u05d4",
"\u0069\u0073\u0020\u0067\u0072\u0065\u0065\u006e",
new Integer(21),
new Boolean(false)
},
{
"\u0645\u062b\u0627\u0644",
"\u05d6\u05d5\u0020\u05e9\u05e0\u05d4\u0020\u05d9\u05e4\u05d4",
"\u0069\u0073\u0020\u0067\u0072\u0065\u0065\u006e",
new Integer(14),
new Boolean(false)
},
};
dataModel = new AbstractTableModel()
{
public int getColumnCount()
{
return names.length;
}
public int getRowCount()
{
return data.length;
}
public Object getValueAt(int row, int col)
{
return data[row][col];
}
public String getColumnName(int column)
{
return names[column];
}
public Class getColumnClass(int c)
{
return getValueAt(0, c).getClass();
}
public boolean isCellEditable(int row, int col)
{
return true;
}
public void setValueAt(Object aValue, int row, int column)
{
System.out.println("Setting value to: " + aValue);
System.out.println();
data[row][column] = aValue;
}
};
tableView = new JTable(dataModel);
tableView.setFont(new Font("Lucida Sans Regular",Font.PLAIN,9));
tableView.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
comboBox = new JComboBox();
comboBox.setFont( new Font("Lucida Sans Regular", Font.PLAIN, 9));
comboBox.addItem("\u062a\u0641\u0627\u062d\u0020\u0623\u062d\u0645\u0631\u0020\u0643\u0628\u064a\u0631");
comboBox.addItem("\u062a\u0641\u0627\u062d\u0020\u0623\u062d\u0645\u0631\u0020\u0643\u0628\u064a\u0631");
comboBox.addItem("\u062a\u0641\u0627\u062d\u0020\u0623\u062d\u0645\u0631\u0020\u0643\u0628\u064a\u0631");
cColumn = tableView.getColumn("Header3");
cColumn.setPreferredWidth(200);
cColumn.setCellEditor(new DefaultCellEditor(comboBox));
DefaultTableCellRenderer colorColumnRenderer = new DefaultTableCellRenderer();
colorColumnRenderer.setBackground(Color.pink);
colorColumnRenderer.setToolTipText("Test");
cColumn.setCellRenderer(colorColumnRenderer);
TableCellRenderer headerRenderer = cColumn.getHeaderRenderer();
if (headerRenderer instanceof DefaultTableCellRenderer)
((DefaultTableCellRenderer)headerRenderer).setToolTipText("This is a test");
TableColumn vColumn = tableView.getColumn("Header4");
vColumn.setPreferredWidth(200);
nColumn = tableView.getColumn("Header3");
DefaultTableCellRenderer numberColumnRenderer = new DefaultTableCellRenderer()
{
public void setValue(Object value)
{
int cellValue = (value instanceof Number) ? ((Number)value).intValue() : 0;
setForeground((cellValue > 30) ? Color.black : Color.red);
setText((value == null) ? "" : value.toString());
}
};
nColumn.setPreferredWidth(200);
JScrollPane scrollpane = new JScrollPane(tableView);
scrollpane.setBorder(new BevelBorder(BevelBorder.LOWERED));
scrollpane.setPreferredSize(new Dimension(700, 400));
frame.setSize(900, 500);
frame.getContentPane().add(scrollpane);
frame.setVisible(true);
}
public static void main(String[] args)
{
new jTable();
}
}
=======================================
======================================================================
- duplicates
-
JDK-4517298 Metrics and display of control characters are inconsistent
- Closed