LINUX.ORG.RU

Кроссплатформенные приложения — миф или реальность?

 , , , ,


0

2

После своего предыдущего треда я начал тыкать Swing. До сих пор не могу понять, использует ли Swing GTK+ или просто читает его тему и рисует так же.
Хочется писать кроссплатформенно, но так, чтобы выглядело нативно на любой платформе. Чтобы на венде использовать ШinForms, Cacao на макакоси и GTK+ на линуксе. А то Metal — совсем не то. Можно ли как-то так сделать?

Казалось бы, ответ — Qt, но говорят, что Qt Jambi протух.


UPD: А ещё хочется использовать системные иконки и системные диалоги выбора файлов. На свинге такое нельзя никак сделать, да?

★★★★★

Последнее исправление: CYB3R (всего исправлений: 2)
Ответ на: комментарий от PolarFox

Или пиши CLI

Чем я и занимаюсь.

CYB3R ★★★★★
() автор топика

Кажется оно использует GTK изначально, но кеширует картинки и потом само рисует из через OpenGL. Тоесть да, это твоя тема GTK+, но при этом используется негномовские размеры кнопок, расстояния и лейауты. Плюс не помню точно что там со шрифтами.

Есть еще такая штука - java-gnome. Но на венде не работает

vertexua ★★★★★
()

Казалось бы, ответ — Qt

ответ — Qt

Может, ну ее, эту жабу... И вперед учить плюсы? Там для формошлепства на Qt много не надо.

solovey ★★
()
Ответ на: комментарий от vertexua

То-то я смотрю, что выглядит криво. Со шрифтами там всё плохо. Можно использовать настраиваемое (хотя и скудно) сглаживание AWT.
Вот моя функция для установки сглаживания и laf (тут много оверхеда):

public static void init() {
	String aa = System.getenv("MY_AA");
	String laf = System.getenv("MY_LAF");

	if (aa != null) {

		if (aa.toLowerCase()
		.matches("off|false|default|on|gasp|lcd|lcd_hrgb|lcd_hbgr|lcd_vrgb|lcd_vbgr")) {
			System.setProperty("awt.useSystemAAFontSettings",
					aa.toLowerCase());
			System.setProperty("swing.aatext", "true");
		} else {
			System.setProperty("swing.aatext", "false");
			System.err.println("Antialiasing mode not supported");
		}
	}

	if (laf != null) {
		LookAndFeelInfo[] lafs = UIManager.getInstalledLookAndFeels();

		for (int i = 0; i < lafs.length; i++) {
			if (lafs[i].getName().toLowerCase().equals(laf.toLowerCase())) {
				System.setProperty("swing.defaultlaf",
							lafs[i].getClassName());
				try {
					UIManager.setLookAndFeel(lafs[i].getClassName());
				} catch (Exception e) {
					System.err.println("Error applying LookAndFeel: "
							+ lafs[i].getName());
				}
			}
		}
	} else {
		System.err.println("No such LookAndFeel installed: " + laf);
	}
}
Про java-gnome я знаю, но в прошлом треде меня отговорили. А венда не нужна.

CYB3R ★★★★★
() автор топика
Ответ на: комментарий от CYB3R

Ну ту уже зависит от того, что тебе надо. Если пилишь проект исключительно для себя, то можно и поизвращаться.. А если это надо по работе, то делай на плюсах и не мучайся, имхо. Тем более, Qt - это совсем не чистые плюсы...

solovey ★★
()

SWT, не? Будут там и системные диалоги, и шрифты, и темы. Правда, придется в каждую систему таскать соответствующие куски системного бинарника.

arkhnchul ★★★
()

swing рисует везде одинаковый гуй, возьми awt и радуйся жизни

EugeneBas ★★
()
Ответ на: комментарий от unfo

Если сравнивать с питоном, то я очень даже люблю кресты.

CYB3R ★★★★★
() автор топика
Ответ на: комментарий от CYB3R

емнип да. Сколь помню, можно таскать сразу все и в рантайме выбирать нужный.

arkhnchul ★★★
()
Ответ на: комментарий от Deleted

А что не так, если не считать того, что выглядят они плохо? Нужно тащить джаву в систему? Да, но без таких ходов никто не обходится.

CYB3R ★★★★★
() автор топика
Ответ на: комментарий от Tweaker

HOT предложение для UT девов :D http://developer.ubuntu.com/resources/tutorials/getting-started/currency-conv...

А вообще такого прям цельного, всеобъемлющего туториала нет, в частности из-за того, что QML\QtQuick быстро развивается, всё новые и новые фичи и пр.

Пошарься по подобным ссылкам:

Если что-то не понятно — пости в раздел dev с тегом QML :3

BruteForce ★★★
()
Ответ на: комментарий от BruteForce

QML\QtQuick быстро развивается, всё новые и новые фичи и пр.

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

Жду стабилизации.

Tweaker ★★★★☆
()
Ответ на: комментарий от CYB3R

Все гуйпрограммы на жаве почему-то имеют небольшой лаг в реакции на действия пользователя, слабозаметно, но присутствует и раздражает. Послушай Мистру, дело говорит.

Tweaker ★★★★☆
()
Ответ на: комментарий от CYB3R

Нельзя не считать того, что оно выглядит вырвиглазно, да ещё и тормозит. Именно GUI. Тащить жабу в систему в принципе тоже не очень интересно, впрочем, но это несколько меньшая проблема по сравнению с.

Deleted
()
Ответ на: комментарий от Deleted

Цель этого треда — найти что-нибудь, что использует системные методы рисования окошек и кнопочек. Тогда приложения не будут тормозить и приобретут такой же внешний вид, как и вся остальная система.

CYB3R ★★★★★
() автор топика
Ответ на: комментарий от Tweaker

Все гуйпрограммы на жаве

Так ли уж все? На каком тулките?

CYB3R ★★★★★
() автор топика
Ответ на: комментарий от Deleted

А как же SWT? java-gnome? Qt Jambi?

CYB3R ★★★★★
() автор топика
Ответ на: комментарий от anonymous

Знаю. Разве что рендеринг шрифтов немного отличается. Веб — классная штука и с серверной частью веба у меня проблем нет: Tomcat и куча классов на джаве.
Тут проблема с клиентской частью: JavaScript. Когда его можно будет заменить чем-то более вменяемым, тогда я буду писать веб-приложения с клиентской частью. Да и HTML с CSS мне не очень-то нравятся, но что поделать.

CYB3R ★★★★★
() автор топика
Ответ на: комментарий от CYB3R

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

ну так из живых - только SWT и остался.

Тогда приложения не будут тормозить

ну как сказать... SWT не быстрее Swing-а. JNI таки весьма дорог.

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

более-менее.

ЗЫ заколебали уже с «гуй на яве тормозит». В основном работает вполне удовлетворительно.

arkhnchul ★★★
()

но говорят, что Qt Jambi протух.

Там совсем недавно были коммиты, т.ч. проект оживили.

f1xmAn ★★★★★
()

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

Так не бывает. К Qt это тоже относится. Они больше для винды и KDE. И к SWT (Xmind, Eclipse) относится. Оно уже для gtk и тоже для винды. В общем, забей на истинную кроссплатформенность. Ее не бывает.

Только специализированный софт обычно не сильно пытается выглядеть нативно. Его используют за другое. Очень хороший пример - IntelliJ IDEA. Она сносно выглядит везде, и не пытается подражать нативному окружению. Кстати, на Java Swing.

dave ★★★★★
()
Ответ на: комментарий от CYB3R

А если его GCJ компилять?

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

arkhnchul ★★★
()

Для работы писал одно время базу данных на Сях (плюсы не умею), но требовался интерфейс, в срочном порядке занялся изучением Java. Внезапно задача стала вроде как бы не нужна, но какую-то часть таки накалякал. Скомпилил, пустил, на оффтопе работает, на линуксе нет. Счас точно не вспомню, код был кошмарен и за ненадобностью я его практически «похерил».

Deleted
()
Ответ на: комментарий от CYB3R

системные методы рисования окошек и кнопочек

не будут тормозить

про xlib/xcb уже писали?

java

йава йавой, а лучше кутей всё равно ничего не найдёшь.

nanoolinux ★★★★
()
Ответ на: комментарий от TERRANZ

относительно

Куда уж нативней?

CYB3R ★★★★★
() автор топика
Ответ на: комментарий от CYB3R

Python+Gtk, JS+Gtk, Ruby+Gtk?

Наконец C++/Gtkmm и то лучше, Glib::RefPtr же, который именно в контексте Gtk замутит правильное управление ресурсами. И сигналы не на препроцесорных костылях, а на libsigc++

vertexua ★★★★★
()
Последнее исправление: vertexua (всего исправлений: 2)
Ответ на: комментарий от lazy_aleks

Хотел, но потом понял, что единственный способ придать ему системный вид — использовать LAF от свинга.

CYB3R ★★★★★
() автор топика

но так, чтобы выглядело нативно

GTK+ на линуксе

Разупорись. GTK+ не более нативен для Linux, чем Qt/wxWidgets/Tcl/Xlib/Xaw/Motif/etc.

Chaser_Andrey ★★★★★
()
Ответ на: комментарий от Chaser_Andrey

GTK/Qt/wxWidgets — мне всё равно.

CYB3R ★★★★★
() автор топика
Ответ на: комментарий от arkhnchul

заколебали уже с «гуй на яве тормозит»
В основном работает вполне удовлетворительно.

[trollface.png] Сам же и подтвердил.

Deleted
()
Ответ на: комментарий от nanoolinux

про xlib/xcb уже писали?

В свете грядущих Wayland/Mir писать на xlib это какое-то злобное буратинство.

Deleted
()

Выход - писать на Qt, но не java. Прототип на python, а потом переносить на кресты, чтобы память не жрало и быстрее работало.

BattleCoder ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.