Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 单元渲染器和失去焦点_Java_Swing_Jtable - Fatal编程技术网

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的回答/评论,他关于创建新代码的想法是正确的。