Выравнивание текста в ярлыках Java - PullRequest
1 голос
/ 19 декабря 2010

Я занимаюсь разработкой приложения на Java с таблицей, полной цифр.В некоторых столбцах я хотел бы выровнять числа (текст, конечно) в столбце так, чтобы десятичные точки были выровнены вертикально в центре ячеек.

Я не вижу каких-либо констант выравнивания, применимых к такого рода ситуации.Есть ли в Java официальный механизм для решения этой ситуации?

Заранее благодарен за любую помощь.

Джон Донер

Ответы [ 2 ]

0 голосов
/ 19 декабря 2010

Как насчет использования объекта DecimalFormat, чтобы у каждого числа было одинаковое количество цифр после десятичной и выравнивание столбца по правому краю.

0 голосов
/ 19 декабря 2010

Я не профессионал в этом, но он работает, как я уже отмечал выше, используя JTextPane в качестве пользовательского средства визуализации ячеек и устанавливая атрибут табуляции в десятичное положение.Если вы сделаете это, вы должны позаботиться о том, чтобы данные представлялись в виде строки и чтобы при редактировании данных перед символом строки в начале строки данных был добавлен символ табуляции.

import java.awt.BorderLayout;
import java.awt.Component;

import javax.swing.*;
import javax.swing.table.*;
import javax.swing.text.*;

@SuppressWarnings("serial")
public class TabStopDecimalAlign extends JPanel {
    private static final String[][] DATA = {{"One", "1.234"}, {"Two", "232.3223"},
    {"Three", "0.2323"}, {"Four", "12.345"}, {"Five", "10000.0"}};
    private static final String[] COLUMNS = {"Count", "Data"};
    private static final int ROW_HEIGHT = 24;
    private DecimalAlignRenderer decimalAlignRenderer = new DecimalAlignRenderer();
    private DefaultTableModel model = new DefaultTableModel(DATA, COLUMNS);
    private JTable table = new JTable(model) {
        @Override
        public TableCellRenderer getCellRenderer(int row, int column) {
            if (column == 1) {
                return decimalAlignRenderer; 
            }
            return super.getCellRenderer(row, column);
        }
    };

    public TabStopDecimalAlign() {
        setLayout(new BorderLayout());
        add(new JScrollPane(table), BorderLayout.CENTER);
        table.setRowHeight(ROW_HEIGHT);
    }

    private static class DecimalAlignRenderer implements TableCellRenderer {
        private static final float POS = 40f;
        private static final int ALIGN = TabStop.ALIGN_DECIMAL;
        private static final int LEADER = TabStop.LEAD_NONE;
        private static final SimpleAttributeSet ATTRIBS = new SimpleAttributeSet();
        private static final TabStop TAB_STOP = new TabStop(POS, ALIGN, LEADER);
        private static final TabSet TAB_SET = new TabSet(new TabStop[] { TAB_STOP });

        private StyledDocument document = new DefaultStyledDocument();
        private JTextPane pane = new JTextPane(document);

        public DecimalAlignRenderer() {
            StyleConstants.setTabSet(ATTRIBS, TAB_SET);
            pane.setParagraphAttributes(ATTRIBS, false);
        }

        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,
                    boolean hasFocus, int row, int column) {
            if (value == null) {
                pane.setText("\t0.0");
            } else {
                pane.setText("\t" + value.toString());
            }
            return pane;
        }


    }



    private static void createAndShowUI() {
        JFrame frame = new JFrame("TabStopDecimalAlign");
        frame.getContentPane().add(new TabStopDecimalAlign());
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                createAndShowUI();
            }
        });
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...