Java 单元渲染器和失去焦点
我正在使用Java 单元渲染器和失去焦点,java,swing,jtable,Java,Swing,Jtable,我正在使用JTable和来更改数字的格式。我已经扩展了DefaultTableRenderer类 在方法getTableCellRenderedComponent中,我用正确的格式重新运行了一个新的JLabel。 我的问题是这样做的话,在有焦点的单元格下面的矩形(边框)就消失了 是否有一种方法可以在单元格具有“我的自定义渲染”焦点时显示默认边框?如果使用DefaultTableRenderer,则可以调用super()方法并从返回的组件中获取border。请尝试下一个示例: import jav
JTable
和来更改数字的格式。我已经扩展了DefaultTableRenderer
类
在方法getTableCellRenderedComponent
中,我用正确的格式重新运行了一个新的JLabel
。
我的问题是这样做的话,在有焦点的单元格下面的矩形(边框)就消失了
是否有一种方法可以在单元格具有“我的自定义渲染”焦点时显示默认边框?如果使用
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();
}
}
如果使用
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();
}
}
如果使用
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();
}
}
如果使用
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();
}
}
以更改数字的格式。我已经扩展了DefaultTableRenderer类
当您只需格式化数据时,请查看一种更简单的自定义渲染器的方法。也就是说,您应该重写setValue(…)
方法,而不是getTableCellRenderer(…)
方法
以更改数字的格式。我已经扩展了DefaultTableRenderer类
当您只需格式化数据时,请查看一种更简单的自定义渲染器的方法。也就是说,您应该重写setValue(…)
方法,而不是getTableCellRenderer(…)
方法
以更改数字的格式。我已经扩展了DefaultTableRenderer类
当您只需格式化数据时,请查看一种更简单的自定义渲染器的方法。也就是说,您应该重写setValue(…)
方法,而不是getTableCellRenderer(…)
方法
以更改数字的格式。我已经扩展了DefaultTableRenderer类
当您只需格式化数据时,请查看一种更简单的自定义渲染器的方法。也就是说,您应该重写
setValue(…)
方法,而不是getTableCellRenderer(…)
方法。Post for help.Post for help.Post for help.Post for help.DefaultCellRenderer是JLabel。无需在渲染器中创建另一个JLabel。只需确保调用super.getTableCellRenderer(…),所有默认属性都将被设置。渲染器中唯一需要的代码是格式代码。另外,请阅读@camickr的回答/评论,他关于创建一个新的JLabel
。DefaultCellRenderer是一个JLabel。无需在渲染器中创建另一个JLabel。只需确保调用super.getTableCellRenderer(…),所有默认属性都将被设置。渲染器中唯一需要的代码是格式代码。另外,请阅读@camickr的回答/评论,他关于创建一个新的JLabel
。DefaultCellRenderer是一个JLabel。无需在渲染器中创建另一个JLabel。只需确保调用super.getTableCellRenderer(…),所有默认属性都将被设置。渲染器中唯一需要的代码是格式代码。另外,请阅读@camickr的回答/评论,他关于创建一个新的JLabel
。DefaultCellRenderer是一个JLabel。无需在渲染器中创建另一个JLabel。只需确保调用super.getTableCellRenderer(…),所有默认属性都将被设置。渲染器中唯一需要的代码是格式代码。另外,请阅读@camickr的回答/评论,他关于创建新代码的想法是正确的。