public class TableFooter implements Border, ChangeListener, AdjustmentListener, TableColumnModelListener
Фишка в TableColumnModelListener
в конструкторе public TableFooter(JTable table)
есть строчка table.getColumnModel().addColumnModelListener(this);//table.getColumnModel() Custoмный Нader многуоровневый(Пример в инете много)
Как раз чтобы менять размер столбца
а имплементация TableColumnModelListener тоже обычная...во всех методах repaintTable() (код ниже)
private void repaintTable() {
if (table.getParent() instanceof JViewport && table.getParent().getParent() instanceof JScrollPane) table.getParent().getParent().repaint();
else table.repaint(); }
Никаких наворотов..Но правда по графу чуть запутанно...взаимные ссылки jtableTableFooter GroupableTableHeader (extends стандартный JTableHeader) ..Но Jtable принадлжежит JInternalFrame и он обрублен...и всё что на нем убивается (JButton JPanel ) Принадлежащие JTable cellrenderи вся атрибутика ,а три осколка связаны через TableColumnModelListener остаются висеть и тратить память..что бы мы ни делали.
При этом просто Jtable c GroupableTableHeader (без Footer) ..всё очищается
Так вот всегда когда Footer и Header идут вместе ,то потеря 1200 байт на форме. Как только ни профилировали...смотрели граф(причем по графу видно,что обрублена форма с таблицей) И знаем какие именно объекты остаются(Это событие Listener на расширение...если мышкой расширять столбец...соответственно столбец footerа тоже должен быть раширен(и он расширяется) но GC в упор (во всех версиях java) не может разрулить,что те объекты надо очистить.
Вот Все познается в сравнении.Украина внедрила онлайн кассы...ещё в 2006 ...и все это прошло тишком нишком...без всяких пиявок к бизнесу офд ФН(Который надо менять раз в период,-по сути это скрытый налог) Постоянные обновления,которые достали,- ФН 1 ФН 1.05 ФН 1.1 ФН 1.2..Постоянно надо менять прошивки..менять драйвера(У нас низкоруровнеый кроссплатформенный драйвера..с флагманской ось Linux)..Иногда работает не так как надо..общение со службой поддержки разработчика ККТ.
Когда два аппарата в обслуживании может это и ничего,а когда их более 300.
Постоянно неожиданно заканчивается либо срок действия ОФД(не проплачено) либо ФН..Аппраты не работают...мозговыносительство увеличилось в 300 раз.
В общем эта вещь некачественная.
А Вот Вам например как надо.-
Укранина..Программный РРО.Программный кассовый аппарат.НЕ надо покупать железяки...Вы просто пишите свое ПО согласно налоговому API И Все.На кассе Сразу чек идет (Не кунакам влюблённого джигита...типа ОФД) а сразу в налоговую.И Подписан он именно ключом кассира.
Не надо раз в период менять железяки..и платить куче посредников-дармоедов.
Почти верно...сама идея в том что на компе клиента запущенаи прослушка(listener) WebSocketа ,и в зависимости какая прослушка запущена по порту, то и работает.
В данном случае получает данные из бразузера формирует чек формата pdf и тут же его печатает.А можно подключить маркеровочное оборудование .Весы.и т.д.(Я говорю не про концептуальную модель,а про реально работающюю модель из браузера подключаются разные "железяки")
POST и GET Должны делаться на тот же IP адрес с какого загружена страница.(В каких то браузерах Где-то это можно в настройках исключить...а где то вообще нельзя(или я не знаю как)...как бы там ни было разработчикам лучше придерживаться стандартного поведения браузеров,а не подавлять настройками их дефолтное поведение)
Началось с того ,что жене аппарат в магазин :-) Если это не концептуальный,а реальный проект,то...Запаритесь Вы методом по usb из браузера такие чеки печатать.(Настоящие по ссылкам(Может в Украине доступны не будут ссылки,найдете способ как открыть))
А WS(Тут ниже обсуждалось) тут нужен именно для того чтобы разрулить момент ...сайт грузится с одного URL, а аппарат находится локально.(или у Вас много касс и на каждой локальное оборудование,в Этом случае ws://localhost: Спасает ибо WS может "ломится на" любой хост (http post на localhost сделать будет проблематично если сайт загружен не с localhost) )
А еще я так понял у Вас Украина(Ибо в России запрещены такие аппараты для печати чека..нужно использовать только Фискальные Регистраторы(ФР))...Это значит со временем Вы будите использовать ПРРО(Программный РРО) и QR оттиск печатать.и тут уже точно без промежуточного локального шлюза будет непросто.(ПРРО тоже могу поделится :-) )
Не знаю зачем Вы так натягивали сову на глобус...Обычно работа с переферией (POS принтеры, Фискальные регистраторы, Сканеры штрихкода Rs-232) Чтобы соеденить с браузером,то делается это через WebSoket.
В Вашем случае.
1.Устанавливаем драйвер.(Неважно Linux или винда)
2.Дальше надо разработать шлюз(некую програмку (у меня есть и на node и java))...принимает пакет данных через websocket (xml или json) и (у меня преобразует по некому шаблону разметки(в xml) в формат pdf и печатает...можете печатать по низкоуровневуму протоколу принтера из этого шлюза).
3.Из браузера типа var socket = new WebSocket("ws://localhost:7081");
socket.send("HELLO");Прога шлюз прослушивает порт и выполняет задачу.
Так можно и отправить на фискальный регистратор подключенный к rs-232.И от сканера штрихкода(rs-232) принять данные.(в любой операционке)
У Меня и у круга моих знакомых не было.Фамилию с именем перепутал оператор в сертификате COVID. что вы от программы хотите-то? Чтоб она имя проверяла по справочнику имен?
А насчет кредитов и тюремных заключений...То нужно достойное оппонирование этим фактам.
Эту статью надо на DOU ,-Возможно там найдуться эксперты,что скажут,что это было не так или не совсем так и история ещё не закончена и имеет(будет иметь совсем другой конец)
Но там навскидку(прочтнеие по диагонали) совершенно другая статья.Тут Вы даже обезьяну с гранатой приципили в картинку.(что на мой взгляд довольно оскарбительно)
Реально Украина ...да с ошибками с проблемами идет вперед...тот же Прогамный РРО какой шаг вперед.(В Росии 4-6 дармоедов предпринимателю надо кормить чтоб чек из аппарата до налоговой дошел .....про ПРРО им и не снилось)
Ну ведь всегда когда развивается проект есть какие-то побочные неприятные эффекты..Дорогу должен осилить идущий...Дия это реально классный сложный проект...
Тут же на Хабре была статья как в России через ЭЦП-КЭП мошенничество с недвижимостью было.И тут же запретили такие операции (в Росии вообще во всех непотнятный ситуациях тут же запрещают, что бы то ни было).
Не бойтесь учтут те проблемы ДИЯ и без запретов поднимут качество приложения и услуг.
Почему Вы например не поднимаете эту тему на DOU Украинском ИТ-портале?
Ну с capt принтерами у меня проблем не было(я ставил на centos 6.5) x64…
И те, перечисленные, модели уже устаревшие.
а вот вышел новый… уже Canon lbp 6030 через ccpd не работает, а работает через usb напрямки (как HP,Brothers и т.д)
И у меня он так и не завёлся.
Я тоже пользуюсь Этой библиотекой… У них очень и очень хороший control Для отображения таблиц DataGrid ,TreeGrid(JQuery… А вот для react не очень удачный datagreed)
Но и не стоит забывать эта библиотека небесплатна.
Именно почему я не знаю...(тут же была ремарка для меня)… это по моему опыту… есть проекты на react(Это POS кассы на планшете… магазин ресторан), ЕГАИС Проверка марок(тоже чтоб мобилу использовать… тут React к месту) На java вообще большая кросспоатформенная Desctop ИС.с дублирующими web мордами для некторых отраслевых процессов(vaadin Это java). и oracle apex.Так вот если вдруг(для меня) нужно вернуть и доработать react… Это всегда выход из зоны комфорта… Пока пишешь(React)… держишь в уме "нить" вроде нормально. Решение выпущено работает… вернуться к нему… всегда жалеешь ,-на кой я выбрал React в этом решении… Возможно какая-то эфимерная нечёткая концепция у React… что потом "концы" сложно собрать в кучу".(Сугубо по моему мнению)
Вы знаете я как предприниматель в ИТ… рассуждаю просто(Мой взглаяд может не подходить для крупного бизнеса)… с точки зрения уменшения ресурса(технического, административного, по сопровождению)… Мои проекты связаны с базами данных(автоматизацией бизнеса)… для малого и среднего.
И в зависимости от ситуации или 1.Oracle Apex(Это быстрая среда для разработки бизнес приложений… мне кажеться быстрее нельзя можно только повтороить).
2.Или(если проект будет иметь много отраслевых подрешений) PHP+HTML контролы на jQuery
Вот я не совсем соглашусь с Вами, а соглашусь с автором… у меня не большая команда… и технологию я оцениваю так… если через более пол-года возвращаемя к коду расшририть функциональность… поправить баг… то для примера java(erp система)… разработан "целый космос " и всегда к коду возвращаться легко… легко дополнить и нет побочных эффектов.возможно из-за принципа концепции ленивой подгрузки кода… А вот в реакте небольшие проектики.(не то что у автора статьи) и вернуться к коду через время(React+Redux) или что-то дополнить… Это боль… я сменил стек .
… а нельзя было остаться на основной работе… как-то выделить время по вечерам и выходным для своего pet-проекта...,? (Ведь в таком формате за три года что-то бы да получилось)
Это дало бы возможность "больше думать нежели трясти"(Надеюсь этот анекдот знают)… Найти оптимальные решения не находясь под мыслью "как обеспечить проживание"
(Вопрос в пустоту… потом увидел, что это "перевод")
Ну пу поменялся тип товара в контексте… та таблица остатков синхронизируется в ответ(даже если в проге это не алгоритмом не предусмотрено… это Ваше право… так же как и не синхронизировать цену )… Фишка в том, что есть зависимость… а 3НФ дожны быть исключены транзитивные зависимости.
Ну у меня реализован такой же склад… с подобной архитектурой… и я считаю что таблица горячих остатков всё же денормализация… из-за присутствия транзитивной зависимости… Про количество я уже писал, Но так же… если у Вас поменялась цена… ВЫ транзитивно меняете её в таблице остатков… изменился сам товар в таблице контекста(у меня это goods_id) меняем без рассуждений и в остатках… поменялся инвернарный номер(у меня seria_id) транзитивно меняем и там… та таблица транзитивно зависмая от контекста(По-простому Вы всегда их должны синхронизировать)… и согласно определению 3НФ -Это ни есть 3НФ
Боюсь что Вы путаете теплое с мягким… У меня так же в одном из отраслевых решений склада реализовано инвернартный номер… и для него отдельная таблица… а также на неё ссылается на documentscontents и на остатки. Подчеркну… от того что это денормализация… это ни есть плохо… без этой таблицы горячих остатков вообще в складе не обойтись.
Да нет там никаких особенностей...всё по классике
public class TableFooter implements Border, ChangeListener, AdjustmentListener, TableColumnModelListener
Фишка в
TableColumnModelListener
в конструкторе
public TableFooter(JTable table)
есть строчка
table.getColumnModel().addColumnModelListener(this);//table.getColumnModel() Custoмный Нader многуоровневый(Пример в инете много)
Как раз чтобы менять размер столбца
а имплементация
TableColumnModelListener тоже обычная...во всех методах repaintTable() (код ниже)
private void repaintTable() {
if (table.getParent() instanceof JViewport && table.getParent().getParent() instanceof JScrollPane) table.getParent().getParent().repaint();
else table.repaint(); }
Никаких наворотов..Но правда по графу чуть запутанно...взаимные ссылки
jtable
TableFooter
GroupableTableHeader (extends стандартный JTableHeader) ..Но Jtable принадлжежит JInternalFrame и он обрублен...и всё что на нем убивается (JButton JPanel ) Принадлежащие JTable cellrenderи вся атрибутика ,а три осколка связаны черезTableColumnModelListener остаются висеть и тратить память..что бы мы ни делали.
При этом просто Jtable c GroupableTableHeader (без Footer) ..всё очищается
Вот я вставлю свои 5 копеек..Имеется кроссплатформенная ИС Desktop Swing
Есть Jtable со своим Custom TableHtader(Многоуровневый) и Footer
Типа как выглядит.
https://cloud.mail.ru/public/4N3v/59puX6cFP
https://cloud.mail.ru/public/55sJ/4RLnfQigZ
https://cloud.mail.ru/public/Pa5S/EH8sk8ZgB
Так вот всегда когда Footer и Header идут вместе ,то потеря 1200 байт на форме. Как только ни профилировали...смотрели граф(причем по графу видно,что обрублена форма с таблицей) И знаем какие именно объекты остаются(Это событие Listener на расширение...если мышкой расширять столбец...соответственно столбец footerа тоже должен быть раширен(и он расширяется) но GC в упор (во всех версиях java) не может разрулить,что те объекты надо очистить.
Да это скорее всего регресс...и 15 лет Вы загнули..изменения с ККТ начались в 2016
Похоже на какого-то школьника подроста ,что играется в ИТ в масштабах страны.
В сухом остатке должно получиться ,что???
-чек от кассы пришёл в налоговую...И как можно было наворотить на этом простом пути всё вот это,что сейчас???
И Это Мы ещё про ЕГАИС,честный знак,ГИС Меркурий не говорим.
Вот Все познается в сравнении.Украина внедрила онлайн кассы...ещё в 2006 ...и все это прошло тишком нишком...без всяких пиявок к бизнесу офд ФН(Который надо менять раз в период,-по сути это скрытый налог) Постоянные обновления,которые достали,- ФН 1 ФН 1.05 ФН 1.1 ФН 1.2..Постоянно надо менять прошивки..менять драйвера(У нас низкоруровнеый кроссплатформенный драйвера..с флагманской ось Linux)..Иногда работает не так как надо..общение со службой поддержки разработчика ККТ.
Когда два аппарата в обслуживании может это и ничего,а когда их более 300.
Постоянно неожиданно заканчивается либо срок действия ОФД(не проплачено) либо ФН..Аппраты не работают...мозговыносительство увеличилось в 300 раз.
В общем эта вещь некачественная.
А Вот Вам например как надо.-
Укранина..Программный РРО.Программный кассовый аппарат.НЕ надо покупать железяки...Вы просто пишите свое ПО согласно налоговому API И Все.На кассе Сразу чек идет (Не кунакам влюблённого джигита...типа ОФД) а сразу в налоговую.И Подписан он именно ключом кассира.
Не надо раз в период менять железяки..и платить куче посредников-дармоедов.
Почти верно...сама идея в том что на компе клиента запущенаи прослушка(listener) WebSocketа ,и в зависимости какая прослушка запущена по порту, то и работает.
В данном случае получает данные из бразузера формирует чек формата pdf и тут же его печатает.А можно подключить маркеровочное оборудование .Весы.и т.д.(Я говорю не про концептуальную модель,а про реально работающюю модель из браузера подключаются разные "железяки")
У Меня не срабатывало...Дело в том что ,бразузеры используют Same Origin Policy
https://www.w3.org/Security/wiki/Same_Origin_Policy
POST и GET Должны делаться на тот же IP адрес с какого загружена страница.(В каких то браузерах Где-то это можно в настройках исключить...а где то вообще нельзя(или я не знаю как)...как бы там ни было разработчикам лучше придерживаться стандартного поведения браузеров,а не подавлять настройками их дефолтное поведение)
Началось с того ,что жене аппарат в магазин :-) Если это не концептуальный,а реальный проект,то...Запаритесь Вы методом по usb из браузера такие чеки печатать.(Настоящие по ссылкам(Может в Украине доступны не будут ссылки,найдете способ как открыть))
https://cloud.mail.ru/public/oR3A/8sQfcycUe
https://cloud.mail.ru/public/xzLB/zXAK8t6ss
А WS(Тут ниже обсуждалось) тут нужен именно для того чтобы разрулить момент ...сайт грузится с одного URL, а аппарат находится локально.(или у Вас много касс и на каждой локальное оборудование,в Этом случае ws://localhost: Спасает ибо WS может "ломится на" любой хост (http post на localhost сделать будет проблематично если сайт загружен не с localhost) )
А еще я так понял у Вас Украина(Ибо в России запрещены такие аппараты для печати чека..нужно использовать только Фискальные Регистраторы(ФР))...Это значит со временем Вы будите использовать ПРРО(Программный РРО) и QR оттиск печатать.и тут уже точно без промежуточного локального шлюза будет непросто.(ПРРО тоже могу поделится :-) )
Не знаю зачем Вы так натягивали сову на глобус...Обычно работа с переферией (POS принтеры, Фискальные регистраторы, Сканеры штрихкода Rs-232) Чтобы соеденить с браузером,то делается это через WebSoket.
В Вашем случае.
1.Устанавливаем драйвер.(Неважно Linux или винда)
2.Дальше надо разработать шлюз(некую програмку (у меня есть и на node и java))...принимает пакет данных через websocket (xml или json) и (у меня преобразует по некому шаблону разметки(в xml) в формат pdf и печатает...можете печатать по низкоуровневуму протоколу принтера из этого шлюза).
3.Из браузера типа var socket = new WebSocket("ws://localhost:7081");
socket.send("HELLO");Прога шлюз прослушивает порт и выполняет задачу.
Так можно и отправить на фискальный регистратор подключенный к rs-232.И от сканера штрихкода(rs-232) принять данные.(в любой операционке)
Лично у Вас проблемы с ДИей Были?
У Меня и у круга моих знакомых не было.Фамилию с именем перепутал оператор в сертификате COVID. что вы от программы хотите-то? Чтоб она имя проверяла по справочнику имен?
А насчет кредитов и тюремных заключений...То нужно достойное оппонирование этим фактам.
Эту статью надо на DOU ,-Возможно там найдуться эксперты,что скажут,что это было не так или не совсем так и история ещё не закончена и имеет(будет иметь совсем другой конец)
Но там навскидку(прочтнеие по диагонали) совершенно другая статья.Тут Вы даже обезьяну с гранатой приципили в картинку.(что на мой взгляд довольно оскарбительно)
Реально Украина ...да с ошибками с проблемами идет вперед...тот же Прогамный РРО какой шаг вперед.(В Росии 4-6 дармоедов предпринимателю надо кормить чтоб чек из аппарата до налоговой дошел .....про ПРРО им и не снилось)
Ну ведь всегда когда развивается проект есть какие-то побочные неприятные эффекты..Дорогу должен осилить идущий...Дия это реально классный сложный проект...
Тут же на Хабре была статья как в России через ЭЦП-КЭП мошенничество с недвижимостью было.И тут же запретили такие операции (в Росии вообще во всех непотнятный ситуациях тут же запрещают, что бы то ни было).
Не бойтесь учтут те проблемы ДИЯ и без запретов поднимут качество приложения и услуг.
Почему Вы например не поднимаете эту тему на DOU Украинском ИТ-портале?
https://dou.ua
И те, перечисленные, модели уже устаревшие.
а вот вышел новый… уже Canon lbp 6030 через ccpd не работает, а работает через usb напрямки (как HP,Brothers и т.д)
И у меня он так и не завёлся.
Я тоже пользуюсь Этой библиотекой… У них очень и очень хороший control Для отображения таблиц DataGrid ,TreeGrid(JQuery… А вот для react не очень удачный datagreed)
Но и не стоит забывать эта библиотека небесплатна.
Именно почему я не знаю...(тут же была ремарка для меня)… это по моему опыту… есть проекты на react(Это POS кассы на планшете… магазин ресторан), ЕГАИС Проверка марок(тоже чтоб мобилу использовать… тут React к месту) На java вообще большая кросспоатформенная Desctop ИС.с дублирующими web мордами для некторых отраслевых процессов(vaadin Это java). и oracle apex.Так вот если вдруг(для меня) нужно вернуть и доработать react… Это всегда выход из зоны комфорта… Пока пишешь(React)… держишь в уме "нить" вроде нормально. Решение выпущено работает… вернуться к нему… всегда жалеешь ,-на кой я выбрал React в этом решении… Возможно какая-то эфимерная нечёткая концепция у React… что потом "концы" сложно собрать в кучу".(Сугубо по моему мнению)
Вы знаете я как предприниматель в ИТ… рассуждаю просто(Мой взглаяд может не подходить для крупного бизнеса)… с точки зрения уменшения ресурса(технического, административного, по сопровождению)… Мои проекты связаны с базами данных(автоматизацией бизнеса)… для малого и среднего.
И в зависимости от ситуации или 1.Oracle Apex(Это быстрая среда для разработки бизнес приложений… мне кажеться быстрее нельзя можно только повтороить).
2.Или(если проект будет иметь много отраслевых подрешений) PHP+HTML контролы на jQuery
Вот я не совсем соглашусь с Вами, а соглашусь с автором… у меня не большая команда… и технологию я оцениваю так… если через более пол-года возвращаемя к коду расшририть функциональность… поправить баг… то для примера java(erp система)… разработан "целый космос " и всегда к коду возвращаться легко… легко дополнить и нет побочных эффектов.возможно из-за принципа концепции ленивой подгрузки кода… А вот в реакте небольшие проектики.(не то что у автора статьи) и вернуться к коду через время(React+Redux) или что-то дополнить… Это боль… я сменил стек .
… а нельзя было остаться на основной работе… как-то выделить время по вечерам и выходным для своего pet-проекта...,? (Ведь в таком формате за три года что-то бы да получилось)
Это дало бы возможность "больше думать нежели трясти"(Надеюсь этот анекдот знают)… Найти оптимальные решения не находясь под мыслью "как обеспечить проживание"
(Вопрос в пустоту… потом увидел, что это "перевод")
Ну пу поменялся тип товара в контексте… та таблица остатков синхронизируется в ответ(даже если в проге это не алгоритмом не предусмотрено… это Ваше право… так же как и не синхронизировать цену )… Фишка в том, что есть зависимость… а 3НФ дожны быть исключены транзитивные зависимости.
Ну у меня реализован такой же склад… с подобной архитектурой… и я считаю что таблица горячих остатков всё же денормализация… из-за присутствия транзитивной зависимости… Про количество я уже писал, Но так же… если у Вас поменялась цена… ВЫ транзитивно меняете её в таблице остатков… изменился сам товар в таблице контекста(у меня это goods_id) меняем без рассуждений и в остатках… поменялся инвернарный номер(у меня seria_id) транзитивно меняем и там… та таблица транзитивно зависмая от контекста(По-простому Вы всегда их должны синхронизировать)… и согласно определению 3НФ -Это ни есть 3НФ
Боюсь что Вы путаете теплое с мягким… У меня так же в одном из отраслевых решений склада реализовано инвернартный номер… и для него отдельная таблица… а также на неё ссылается на documentscontents и на остатки. Подчеркну… от того что это денормализация… это ни есть плохо… без этой таблицы горячих остатков вообще в складе не обойтись.