我正在尝试突出jtable单元格的文本。 这是我的代码: 当我在testingHighlighter方法中获取指定单元格的编辑器并尝试突出显示该编辑器组件中的文本时。请帮我,我错了。
public class test extends JFrame
{
DefaultTableModel model;
JTable table;
String col[] = {"Name","Address","Phone","test"};
public static void main(String args[])
{
test t = new test();
t.start();
t.testingHightligher();
}
public void start()
{
model = new DefaultTableModel(col,2);
table=new JTable(model){@Override
public boolean isCellEditable(int arg0, int arg1) {
return true;
}};
JScrollPane pane = new JScrollPane(table);
setColumnEditor( table.getColumnModel().getColumn( 0 ), new Object[] { "AND",
"OR" }, "Logical Operator" );
Object[] objs = new Object[] { "==", "=" };
setColumnEditor( table.getColumnModel().getColumn( 2 ), objs, "Logical Operator");
JTextField field = new JTextField();
DefaultCellEditor editor = new DefaultCellEditor( field );
editor.setClickCountToStart( 1 );
TableColumn col = table.getColumnModel().getColumn( 3 );
col.setCellEditor( editor );
DefaultTableCellRenderer renderer = new DefaultTableCellRenderer();
renderer.setToolTipText( "click to edit" );
col.setCellRenderer( renderer );
table.getColumnModel().getColumn( 0 ).setPreferredWidth( 25 );
table.getColumnModel().getColumn( 1 ).setPreferredWidth( 120 );
table.getColumnModel().getColumn( 2 ).setPreferredWidth( 25 );
table.getColumnModel().getColumn( 3 ).setPreferredWidth( 100 );
table.getTableHeader().setReorderingAllowed( false );
table.setValueAt("csanuragjain",0,3);
add(pane);
setVisible(true);
setSize(500,400);
setLayout(new FlowLayout());
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
private void setColumnEditor( TableColumn col, Object[] editValues, String renderTip )
{
JComboBox comboBox = null;
if( editValues != null )
{
comboBox = new JComboBox( editValues );
}
else
{
comboBox = new JComboBox();
}
comboBox.setMaximumRowCount( 6 );
DefaultCellEditor editor = new DefaultCellEditor( comboBox );
editor.setClickCountToStart( 2 );
col.setCellEditor( editor );
DefaultTableCellRenderer renderer = new DefaultTableCellRenderer();
renderer.setToolTipText( renderTip );
col.setCellRenderer( renderer );
TableCellRenderer headerRenderer = col.getHeaderRenderer();
if( headerRenderer instanceof DefaultTableCellRenderer )
{
( (DefaultTableCellRenderer) headerRenderer ).setToolTipText( "test" );
}
}
void testingHightligher()
{
Object value = table.getValueAt(0, 3);
JTextField field = (JTextField) table.getColumnModel().getColumn( 3 ).getCellEditor().getTableCellEditorComponent(table, value, true, 0, 3);
try
{
field.getHighlighter().addHighlight(0, 3, new javax.swing.text.DefaultHighlighter.DefaultHighlightPainter( Color.RED ));
}
catch(BadLocationException ex)
{
ex.printStackTrace();
}
}
}
Please help me where i am wrong..
答案 0 :(得分:2)
接下来的问题是,您尝试在编辑JTable
的单元格时看到的TableCellEditor中突出显示文本,但在那一刻您只看到CellRenderer,您可以通过添加{{1}来修复代码在table.editCellAt(0, 3);
方法的开头。也可以像testingHightligher()
中的下一个代码一样调用您的测试:
main()
如果您想在SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
t.testingHightligher();
}
});
中突出显示未编辑的文字,则需要使用TableCellRenderer
。 Here是教程。
示例:
JTable
你需要像这样的somthin,我建议你在TableCellRenderer r = new TableCellRenderer() {
JTextField f = new JTextField();
@Override
public Component getTableCellRendererComponent(JTable arg0, Object arg1, boolean arg2, boolean arg3, int arg4, int arg5) {
if(arg1 != null){
f.setText(arg1.toString());
try {
f.getHighlighter().addHighlight(0,3,new javax.swing.text.DefaultHighlighter.DefaultHighlightPainter(Color.RED));
} catch (BadLocationException e) {
e.printStackTrace();
}
} else {
f.setText("");
f.getHighlighter().removeAllHighlights();
}
return f;
}
};
替换JTextField
,然后像written here
编辑:
以下是您的完整示例,它可以工作,观察和检查它:
JLabel