2016-08-11 3 views
1

Я создаю приложение cn1 и до сих пор использовал «Theme» в GUI Builder, чтобы изменить внешний вид контейнеров и кнопок. Теперь я хочу добавить определенную границу в контейнер, и мне легче выполнить границу через css, я нашел инструкции о том, как это сделать и код здесь: https://www.codenameone.com/blog/rounded-corners-shadows-and-gradients-with-css.html. Я добавил файл .jar, создал папку css и добавил файл theme.css с кодом. В моем методе forforeshow моей формы я изменяю uiid контейнера в uiid, определенный в моей theme.css. Однако, когда я запускаю приложение, контейнер принимает стандартный контейнер uiid по умолчанию, а не тот, который указан в моем .css. Я чувствую, что это потому, что у меня уже есть тема, определенная в моем gui builder с моими uiids, и теперь я пытаюсь изменить uiid контейнера на uiid, определенный в другой теме. Что-то я здесь делаю неправильно?кодовое имя с помощью gui builder и css.

ответ

2

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

Если они находятся в том же файле Рез сделать это:

theme = UIManager.initNamedTheme("/theme", "firstTheme"); 
UIManager.getInstance().addThemeProps(theme.getTheme("secondTheme")); 

Если они находятся в отдельных файлах сделать это:

theme = UIManager.initNamedTheme("/theme", "firstTheme"); 
Resources otherTheme = Resources.openLayered(("/otherTheme"); 
UIManager.getInstance().addThemeProps(otherTheme.getTheme("secondTheme")); 

Это обсуждается в Codename One Developer Guide под Тема Расслоение.

+0

У меня есть моя theme.res, которая была создана по умолчанию. Затем я добавил css-ant-task.jar и добавил папку «css» в свой корень. В моей папке css я добавил «theme2.css», где я добавляю код для некоторых uiids. Это визуальное приложение, поэтому я использую StateMachine и StateMachineBase. Я попытался добавить это в свой onstart: Resources otherTheme = Resources.openLayered ("/ theme2.css"); UIManager.getInstance(). AddThemeProps (otherTheme.getTheme ("theme2")); Но приложение падает с нулевым указателем на второй строке. – Kyri33

+0

Нет поддержки CSS, css переводится в отдельный файл res, поэтому используйте ''/theme2 "'. Заметьте, что я явно не указал расширение файла. Для старого GUI-конструктора вам нужно поместить этот код в метод initTheme. Вам не нужен первый блок с 'initNamedTheme', только вызов' super', а затем код другой темы. –

+0

Это сработало. Сделал звонок, чтобы обновитьTheme, и это работает. Спасибо shai – Kyri33