JTable - DefaultTableCellRenderer - getCurrencyInstance ()

Я хочу изменить формат столбца 2 (Columna 2) на валютный формат всех данных, я пытаюсь это сделать, но ничего не делает. Не могли бы вы помочь мне?

Это мои данные:

JTable - DefaultTableCellRenderer - getCurrencyInstance ()

Я хочу, чтобы данные были такими:

JTable - DefaultTableCellRenderer - getCurrencyInstance ()

С помощью этого кода я пытаюсь:

public class CurrencyCellRenderer extends DefaultTableCellRenderer {

    @Override
    public final Component getTableCellRendererComponent(JTable table, Object value,
            boolean isSelected, boolean hasFocus, int row, int column) {
        final Component result = super.getTableCellRendererComponent(table, value,
                isSelected, hasFocus, row, column);
        if (value instanceof Number) {
            setHorizontalAlignment(JLabel.CENTER);
            setText(defaultFormat.format(value));
        } else {

            setText("NO");
        }
        return result;
    }
}

jTable1.getColumnModel().getColumn(2).setCellRenderer(new CurrencyCellRenderer());

Он ничего не делает, не могли бы вы мне помочь? Спасибо!!!

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
104
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вам необходимо создать значение изменяющегося значения resultпосле. Создавая результат раньше, мы просто вернем те же старые данные.

например.,

private class CurrencyCellRenderer extends DefaultTableCellRenderer {

    @Override
    public final Component getTableCellRendererComponent(JTable table, Object value,
            boolean isSelected, boolean hasFocus, int row, int column) {
        if (value == null) {
            value = 0.0;
        } 
        value = myFormat.format(value);

        final Component result = super.getTableCellRendererComponent(table, value,
                isSelected, hasFocus, row, column);

        return result;
    }
}

Мой MCVE для подтверждения концепции:

import java.awt.BorderLayout;
import java.awt.Component;
import java.text.NumberFormat;
import java.util.Locale;

import javax.swing.*;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;

@SuppressWarnings("serial")
public class CurrencyTable extends JPanel {
    private static final String[] TABLE_HEADERS = { "Text", "Value" };
    private static final Object[][] DATA = { { "Foo", 1.1 }, { "Bar", 2.2 }, { "Bax", 3.3 } };
    private DefaultTableModel tableModel = new DefaultTableModel(DATA, TABLE_HEADERS);
    private JTable table = new JTable(tableModel);
    private NumberFormat myFormat = NumberFormat.getCurrencyInstance(Locale.FRANCE);

    public CurrencyTable() {
        table.getColumnModel().getColumn(1).setCellRenderer(new CurrencyCellRenderer());

        setLayout(new BorderLayout());
        add(new JScrollPane(table));
    }

    private class CurrencyCellRenderer extends DefaultTableCellRenderer {

        @Override
        public final Component getTableCellRendererComponent(JTable table, Object value,
                boolean isSelected, boolean hasFocus, int row, int column) {
            if (value == null) {
                value = 0.0;
            }
            value = myFormat.format(value);

            final Component result = super.getTableCellRendererComponent(table, value, isSelected,
                    hasFocus, row, column);

            return result;
        }
    }

    private static void createAndShowGui() {
        CurrencyTable mainPanel = new CurrencyTable();

        JFrame frame = new JFrame("CurrencyTable");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().add(mainPanel);
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> createAndShowGui());
    }
}

Ваш код, если он работает, но он не работает для меня, в любом случае спасибо Hovercraft! Извините за так много постов, которые я сделал!

user9668584 03.06.2018 22:54

Хорошо, у меня есть решение:

NumberFormat defaultFormat = NumberFormat.getCurrencyInstance();

public class MyRenderer extends JLabel implements TableCellRenderer {

    @Override
    public Component getTableCellRendererComponent(JTable table,
            Object value, boolean isSelected, boolean hasFocus, int row,
            int col) {
        DefaultTableCellRenderer renderer
                = new DefaultTableCellRenderer();
        Component c = renderer.getTableCellRendererComponent(table,
                value, isSelected, hasFocus, row, col);
        String s = "";
        if (col == 2) {
            double d = Double.parseDouble( String.valueOf(value)) ;
            s = defaultFormat.format(d);
            c = renderer.getTableCellRendererComponent(table, s,
                    isSelected, hasFocus, row, col);
            ((JLabel) c).setHorizontalAlignment(SwingConstants.RIGHT);
        }
        return c;
    }
}

jTable1.getColumnModel().getColumn(2).setCellRenderer(new MyRenderer());

Изображение здесь

Всем спасибо, ребята!

Другие вопросы по теме