我正在使用JTable
并更改数字格式。我扩展了DefaultTableRenderer
类。
在方法getTableCellRenderedComponent
中,我使用正确的格式重新启动新的JLabel
。
我的问题是通过这样做的矩形(边框)加强了焦点消失的单元格。
当单元格具有我的自定义渲染焦点时,是否有办法显示默认边框?
答案 0 :(得分:2)
为了改变数字的格式。我扩展了DefaultTableRenderer类。
当您需要做的就是格式化数据时,请查看Table Format Renderers以便更轻松地自定义渲染器。也就是说,您应该覆盖setValue(...)
方法而不是getTableCellRenderer(...)
方法。
答案 1 :(得分:1)
如果您使用DefaultTableRenderer
,则可以调用super()
方法并从返回的组件中获取Border
。试试下一个例子:
import java.awt.Component;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.TableCellRenderer;
public class TestFrame extends JFrame {
public TestFrame() {
init();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pack();
setLocationRelativeTo(null);
setVisible(true);
}
private void init() {
JTable t = new JTable(3,3);
t.getColumnModel().getColumn(0).setCellRenderer(getRenderer());
add(new JScrollPane(t));
}
private TableCellRenderer getRenderer() {
return new DefaultTableCellRenderer(){
private JLabel l = new JLabel();
{
l.setOpaque(true);
}
@Override
public Component getTableCellRendererComponent(JTable table,
Object value, boolean isSelected, boolean hasFocus,
int row, int column) {
JComponent tableCellRendererComponent = (JComponent) super.getTableCellRendererComponent(table, value, isSelected, hasFocus,row, column);
l.setText(value == null ? "" : value.toString());
l.setBorder(tableCellRendererComponent.getBorder());
l.setBackground(tableCellRendererComponent.getBackground());
l.setForeground(tableCellRendererComponent.getForeground());
return l;
}
};
}
public static void main(String... s){
new TestFrame();
}
}