Почему Java Swing ведет себя по-разному в разных системах? - PullRequest
4 голосов
/ 18 апреля 2010

Какой-то свинг-код, который я пишу на своем компьютере, ведет себя по-разному на компьютере моего коллеги, на моем компьютере и в моем ноутбуке.

Интересно, что я могу сделать, чтобы мои приложения Swing вели себя одинаково на каждом компьютере?

Я хочу убедиться, что алгоритм, который я тестировал на моем компьютере, будет работать так же, как и на моих клиентских компьютерах.

например. Проблема с фокусировкой JTextField отлично работает в моем ноутбуке с Windows XP, но не на компьютере моего коллеги с Windows XP, ни на моем рабочем компьютере с Ubuntu.

набл. конкретная проблема JTextField не является предметом этого вопроса.

Ответы [ 3 ]

4 голосов
/ 18 апреля 2010

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

Я разрабатываю многоплатформенное приложение Swing - и пользователи Windows сообщают о всевозможных проблемах, которых нет у пользователей Linux, и наоборот. К сожалению, для таких проблем не существует серебряной пули - всестороннее тестирование и неприятные исправления - единственная игра в городе.

И все идет исключительно глючно и грязно в области сменного внешнего вида. Например - изменение размера JSplitPane с помощью металла или нимба происходит очень быстро (как и ожидалось), но если вы используете GTK + plaf, все идет к черту. Это более серьезная (производительность) проблема - визуальные проблемы (отсутствие границ, компоненты, неправильно помещающиеся в контейнеры и т. Д.) Не имеют конца ... Несмотря на все это, Swing продолжает оставаться одним из лучших вариантов для многоплатформенных настольных приложений. *

2 голосов
/ 18 апреля 2010

Интересно, я могу что-нибудь сделать? к моим приложениям Swing ведут себя то же самое в каждом компьютере?

Я работаю над сложным приложением Java Swing, которое поставляется в OS X / Windows / Linux, так что, как ответил Божидар, проблемы слишком реальны.

Для некоторых компонентов, если у вас есть некоторые навыки проектирования / программирования пользовательского интерфейса, вы можете просто написать свой собственный компонент : я понимаю, что это, вероятно, не полезный ответ, но он работает.

Например, нам нужен выпадающий список «поиск по типу» (например, тот, который появляется при запуске поиска на главной странице поиска Google), который будет выглядеть и работать в Linux / Windows / OS X. Попробовав бесчисленное количество «решений», полных специфических особенностей Swing, которые не будут работать везде (например, угадайте, что, проблемы с фокусом;), мы решили просто написать наш собственный компонент «с нуля».

Мы можем перехватывать события мыши и клавиатуры в обеих OS X / Windows / Linux: мы можем написать компонент, который не только выглядит , но также ведет себя одинаково на всех трех платформах.

В дополнение к «find-as-you-type» мы также написали наш собственный всплывающий компонент tooltip, двойной индикатор выполнения (для отображения индикатора в одном на одном, чтобы показать прогресс в стиле производителя / потребителя на одной панели) и сложный компонент, включающий в себя несколько «текстовых полей», которые были нелепо сложными и ломались, когда мы пытались сделать это с помощью Swing (и разбивались по-разному на разных платформах, например, странные проблемы с фокусировкой или отсутствие отображения каретки и т. д.). Поэтому мы «испортились» и сами переписали весь компонент.

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

Я понимаю, что это, возможно, не то, что вы хотите услышать: я работал над пользовательским интерфейсом как для игр, так и для мобильных приложений в те времена, и у меня есть некоторые графические навыки, поэтому мне не сложно написать хорошо выглядящий Компоненты пользовательского интерфейса.

К сожалению, если вы хотите, чтобы какой-то компонент пользовательского интерфейса Java выглядел и вел себя одинаково на всех платформах, иногда это ваша единственная альтернатива ...

0 голосов
/ 19 апреля 2010

Я хочу убедиться, что у меня есть алгоритм протестировано на моем компьютере будет работать так же в моих клиентских компьютерах

«Алгоритм» должен работать нормально.

Вы получаете проблемы, когда полагаетесь на порядок событий, который может быть различным на разных платформах. Один из наиболее распространенных, о которых я знаю, - это удерживать клавишу, чтобы повторялась:

a) в Windows вы получаете нажатие клавиш, нажатие клавиш, нажатие клавиш, отпускание клавиш.

b) в Unix вы получаете нажатие клавиш, keyReleased, keyPressed, keyReleased ...

Между прочим, было бы неплохо, чтобы мой комментарий о том, работает ли мое предложение в вашем текстовом поле или нет. Как я уже говорил, у меня нет платформы Ubuntu для тестирования, поэтому мне любопытно узнать результат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...