Создание формата ячеек JTable

123
25 декабря 2020, 08:40
    public class KadrPress extends JFrame{
    public KadrPress() throws HeadlessException {
        super("Кадровая работа");
        this.setDefaultCloseOperation(EXIT_ON_CLOSE);
        this.add(lineMenu(),"North");
        this.add(osnTabPane(),"Center");
        this.setExtendedState(MAXIMIZED_BOTH);
        this.setVisible(true);
    }
    //Создание меню
    private JMenuBar lineMenu()
    {
        //Меню файл
        JMenuBar lineMenu=new JMenuBar();
        //Меню Файл
        JMenu filemenu=new JMenu("Файл");
        JMenuItem newFile=new JMenuItem("Создать");
        JMenuItem openFile=new JMenuItem("Открыть");
        JMenuItem saveFile=new JMenuItem("Сохранить");
        filemenu.add(newFile);
        filemenu.add(openFile);
        filemenu.add(saveFile);
        filemenu.addSeparator();
        filemenu.add(new ExitAction());
        lineMenu.add(filemenu);
        return lineMenu;
    }
    //Создание основной панели с вкладками
    private JTabbedPane osnTabPane()
    {
        JTabbedPane osnTabPane=new JTabbedPane();
        osnTabPane.addTab("Общие сведения",osnovSvedeniyaJLabel());
        osnTabPane.addTab("Лист 2",new JPanel());
        return osnTabPane;
    }
    //Панель основные сведения
    private JPanel osnovSvedeniyaJLabel()
    {
        JPanel osnovSvedeniyaJLabel=new JPanel();
        osnovSvedeniyaJLabel.setLayout(new GridLayout(1,2));
        osnovSvedeniyaJLabel.add(levayaJTable());
        osnovSvedeniyaJLabel.add(new JLabel("2"));
        return osnovSvedeniyaJLabel;
    }
    //Модель основной таблицы
    private JTable levayaJTable ()
    {
        String[]dannie=new String[]{
                "Фамилия","Имя","Отчество","Личный номер","Число, месяц, год рождения",
                "Место рождения (согласно паспорта)","Серия и номер паспорта","Дата выдачи","Кем выдан",
                "Код подразделения","Серия и номер удост. личности (Военного билета)","Дата выдачи(ВБ)",
                "Кем выдано","ИНН"
        };
        JTable levayaJTable=new JTable(new OsnovTable(dannie));
        levayaJTable.setRowHeight(20);
        levayaJTable.setOpaque(false);
        levayaJTable.getColumnModel().getColumn(1)
                .setCellRenderer(new MaskTableCellRenderer());
        return levayaJTable;
    }
    //Модель основной таблицы
    private class OsnovTable extends AbstractTableModel
    {
        String[]dannie;
        HashMap<String,String>data=new HashMap<>();
        public OsnovTable(String[]dannie) {
            this.dannie=dannie;
        }
        @Override
        public int getRowCount() {
            return dannie.length;
        }
        @Override
        public int getColumnCount() {
            return 2;
        }
        @Override
        public Object getValueAt(int rowIndex, int columnIndex) {
            if (columnIndex==0)return dannie[rowIndex];
            if (columnIndex==1) return data.get(dannie[rowIndex]);
            return null;
        }
        @Override
        public boolean isCellEditable(int rowIndex, int columnIndex) {
            if (columnIndex==0)return false;
            if (columnIndex==1)return true;
            return false;
        }
        @Override
        public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
            data.put(dannie[rowIndex], (String) aValue);
        }
    }
    //Создание маски таблицы
    private class MaskTableCellRenderer extends DefaultTableCellRenderer
    {
        @Override
        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
            if (table.getModel().getValueAt(row,0).equals("Число, месяц, год рождения")){
            //if (dannie[row].equals("Число, месяц, год рождения")){
                try {
                    MaskFormatter dateMask=new MaskFormatter("##.##.####");
                    dateMask.setPlaceholderCharacter('0');
                    return new JFormattedTextField(dateMask);
                } catch (ParseException e) {
                    e.printStackTrace();
                }
            }
            return super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
        }
    }

    //Команда выхода из приложения
    class ExitAction extends AbstractAction
    {
        public ExitAction() {
            putValue(NAME,"Выход");
        }
        @Override
        public void actionPerformed(ActionEvent e) {
            System.exit(0);
        }
    }
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new KadrPress();
            }
        });
    }
}

Подскажите пожалуйста, имеется модель таблицы приведенная выше. На вход поступает массив

String[]dannie=new String[]{
                "Фамилия","Имя","Отчество","Число, месяц, год рождения",
                "Место рождения (согласно паспорта)","Серия и номер паспорта","Дата выдачи","Кем выдан",
                "Код подразделения","Серия и номер удост. личности (Военного билета)","Дата выдачи(ВБ)",
                "Кем выдано","ИНН"
        };
        JTable levayaJTable=new JTable(new OsnovTable(dannie));

Необходимо следующее: 1. Для строки "серия и номер паспорта" задать MaskFormatter типа ("#### ######") 2.Для строки "Число, месяц, год рождения" задать MaskFormatter типа ("##.##.####") Подскажите каким образом лучше реализовать данную задачу. Спасибо.

Answer 1

Возможно это поможет:

    MaskFormatter maskFormatter1 = new MaskFormatter("+ (###) ### ####");
    MaskFormatter maskFormatter2 = new MaskFormatter("### ### ####");
    levayaJTable.getColumnModel().getColumn(1).setCellEditor(
            new DefaultCellEditor(new JFormattedTextField(maskFormatter1)) {
        @Override
        public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
            JFormattedTextField c = (JFormattedTextField) super.getTableCellEditorComponent(table, value, isSelected, row, column);
            if (row %2 ==0){
                maskFormatter2.uninstall();
                maskFormatter1.install(c);
            }
            else {
                maskFormatter1.uninstall();
                maskFormatter2.install(c);
            }
            return c;
        }
    });
READ ALSO
Unsupported method: AndroidProject.getVariantNames()

Unsupported method: AndroidProject.getVariantNames()

Клонировал проект андроид приложения с гитхабаИ получил следующее:

124
Реализация сервиса Google play game

Реализация сервиса Google play game

Не могу найти информацию как реализовать вход в игру по Google (play game), чтобы записывать количество очков и выводить в приложении рейтинг игроковПодскажите,...

121
Нижний элемент наезжает на верхний

Нижний элемент наезжает на верхний

Столкнулся с такой проблемойПри схлопывании окна нижний JXTaskPaneContainer наезжает на верхний элемент (JTextArea)

108
Как определить что произошел клик по изображению нарисованному при помощи drawImage

Как определить что произошел клик по изображению нарисованному при помощи drawImage

Есть элемент созданный с помощью drawImage и какого-либо изображенияХотелось бы узнать, как можно реализовать удаление элемента по клику на нём?

131