Меню Рубрики

Установка swing в eclipse

FAQ: Eclipse

Java Tools /

Как говориться, — главное начать. Будет заполняться постепенно.

Для того, чтоб установить Eclipse, нужно всего лишь распаковать скачанный архив и запустить executable файл.

Особенности разработки в Eclipse

Все проекты в Eclipse находятся в Workspace. В Workspace может храниться произвольное количество проектов, которые могут как быть независимыми, так и зависеть друг от друга.
В Eclipse есть понятие перспектив(perspective) — это режимы, в которых может работать разработчик. В зависимости от открытой перспективы, разработчик видит определенный набор панелей. Например, в Java Perspective по умолчанию вы видите редактор, Package View, Console и т.д. В Debug Perspective по умолчанию вы увидите такие вещи, как Inspector, Watch, Breakpoints, etc.
Разработчик может настроить сам что он хочет видеть в той или иной перспективе и легко переключаться между режимами разработки.
Вы можете найти перечень всех перспектив следующим образом:
Window->Open Perspective->Other .
Переключаться между перспективами можно с помощью горячих клавиш: Ctrl+F8.

Как устанавливать плагины для Eclipse

Установка плагинов в Eclipse довольно-таки оригинальная. Плагины находятся как правило на каких-то сайтах, нужно лишь ввести URL и плагин будет загружен и установлен. Обращаю внимание только, что не все плагины бесплатны.
1. Расположение этого пункта отличается в зависимости от версии, однако все они где-то близко:
Help -> Install New Software
Выбираем Add, именуем как-то плагин, вставляем адрес, ну а дальше все интуитивно понятно.
2. Также плагины можно скачать в zip архиве. Часто в этом архиве хранятся несколько каталогов, содержимое которых нужно поместить в одноименные папки в корневом каталоге Eclipse.
3. Последний способ — добавление плагина в виде jar-архива. В таком случае идем по тому же пути, что и в первом варианте, только вместо Add выбираем Add Archive.

Как добавить библиотеку в проект

Для того, чтоб добавить jar в >ПКМ на проекте -> Build Path -> Configure Build Path -> Libraries . Здесь есть выбор:
1. Add JARs добавит библиотеку в classpath с относительным путем.
2. Add External JARs добавить jar с абсолютным путем.
Как правило библиотеки лежат в самом проекте, поэтому выбирать лучше 1й пункт, да и на чужой машине проект не запуститься, если пользоваться 2м вариантом.

Часто не найдя схему по которой можно проверить правильность XML, eclipse начинает на него ругаться. Исправить это можно подключив в XML каталог нужную xsd схему. Подключение xsd на примере исправления ошибок валидации конфигурации WEB сервисов для Spring:

1 Открыть в Eclipse Windows / Preferences
2 XML / XML Catalog
3 Нажать кнопку «Add. «
4 В поле «Location:» ввести путь к xsd. В случае если xsd лежит в jar то в начале пути к jar поставить восклицательный знак, а к пути прибавить преффикс jar:file: а после пути к jar архиву путь внутри архива например:

5. В поле «Key:» ввести нужный xsd(тот на несуществование которого ругается Eclipse). Например:

6. Поле «Key Type» должно изменится на «Namespace Name».
7. Нажать кнопку ОК.

Разработка интерфейса Swing/SWT

Большинство сборок Eclipse распространяется без GUI редактора для AWT, Swing или SWT. Из бесплатных плагинов наиболее популярен Jigloo GUI Builder. Его отличает живучесть — спокойно переносит правку разработчиками сгенированного им кода . В большинстве случаев он понимает код сгенерированными другими IDE такими как Netbeans или IDEA. Интегрирован с Swing Application Framework и beans-binding-api.

источник

Визуальный swing в Eclipse

Есть ли способ использовать визуальный редактор для создания swing приложений в Eclipse? Я использую Ганимед.

5 Ответов

WindowBuilder Pro (eclipse.org): «WindowBuilder-это мощный и простой в использовании двунаправленный конструктор Java GUI», см. Также WindowBuilder Pro на code.google.com .

Visual Swing для Eclipse -редактор, который работает непосредственно с исходными файлами .java. Записи:

  1. Обновление url на первой странице неверно ( выпуск 115 ), вместо этого должно быть: http://visualswing4eclipse.googlecode.com/svn/trunk/vs4e/
  2. Вы должны снять галочку «Group items by category», чтобы увидеть установку.
  3. Оригинальное объявление visual swing для eclipse .
  4. Разбился для меня при открытии файла netbeans-generated swing.

Визуальный редактор от ehecht.com -чья-то собственная версия, последнее обновление 2010-08-29: «prelinary [sic] eclipse 3.6 (helios) version» (прямая загрузка: ve_eclipse_36_win32_201008292115.zip ) «эти файлы являются неофициальными сборками. Так что вы используете его на [так в оригинале] ваш страх и риск.«

  1. Встроенный редактор GUI
  2. Использует файл xml в качестве источника для проектирования графического интерфейса, выполняя одностороннее преобразование
  3. Добавляет свои собственные библиотеки в ваш проект для поддержки создания GUI.

JIGLOO SWT/Swing GUI Builder для Eclipse и WebSphere — Примечание: Jigloo является бесплатным для некоммерческого использования, но для коммерческого использования требуется покупка профессиональной лицензии (после успешной оценки Jigloo).

Варианты больше не являются жизнеспособными / доступными:

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

Я использую Jigloo довольно много, и это довольно хорошо. Может генерировать GUIs как для Swing, так и для SWT. Бесплатно для некоммерческого использования и довольно доступно по цене $US85 за разработчика для коммерческого использования. Отлично работает с 3.4 (Ганимед).

Вы можете попробовать установить версию echech VE (визуальный редактор).
Здесь у вас есть еще одна процедура настройки , чтобы следовать, если первый не работает

Он должен работать с with eclipse3.4 (Ганимед).
Или вы можете скачать исходную версию и установить ее в программе установки eclipse3.2.

Это единственный визуальный редактор , о котором я знаю , что он был свободен и поддерживал Swing.
Примечание: это архивированный проект Eclipse с июня 2011 года.

техван упоминает коммерческий редактор: SwingDesigner (теперь осталось только WBPro для Smalltalk )

Возможно, вы захотите попробовать этот бесплатный визуальный редактор Swing для eclipse. Я еще не успел запустить его, но это уже в моем списке задач (этот редактор выглядит интересно, и он с открытым исходным кодом).

Похожие вопросы:

Возможный Дубликат : Лучший дизайнер GUI для eclipse? Я использую Eclipse для разработки Java SWING приложения. Каков лучший и бесплатный визуальный редактор, который можно использовать в Eclipse.

у меня есть код swing, который написан в eclipse с помощью Визуального редактора (Не выбирайте класс как визуальный класс), теперь мне нужно изменить этот код с помощью Визуального редактора, как я.

Я пытаюсь создать проект java GUI для школы, используя визуальный редактор Eclipse с Swing. Но у меня есть много проблем, изучая это, так как это первый раз, когда я делаю GUI. Например, когда я.

Я обновил свой Eclipse с Индиго на Юнону 4.2, но не нашел Swing Plugin для Eclipse. Мне нужен swing в Eclipse, мне не нравится NetBeans, значит, есть какой-то способ использовать Swing в Eclipse.

Я использую Eclipse и визуальный редактор (VE) для Eclipse: Eclipse IDE для разработчиков Java EE 1.3.2.20110218-0812 Визуальный Редактор 1.5.0.R20101202-1328 После нескольких дней работы над GUI.

Эй, я использую Eclipse Helios в Ubuntu, и я хотел бы установить плагин для eclipse, который работает с swing. Итак, я нашел визуальный редактор на этом сайте http://www.eclipse.org/vep/downloads/ и.

Я скачал eclipse Version: 3.5.0, также визуальный редактор, кажется, работает, и теперь я решил очистить небольшой проект, который у меня был, а затем открыть main.java с визуальным редактором, но.

Я скачал eclipse 3.7, но я не знаю, как загрузить визуальный редактор! Мне нужно сделать GUI. Кто-нибудь может помочь?

Возможный Дубликат : Визуальный swing в Eclipse может ли кто-нибудь дать мне java swing конструктор форм, например плагин к eclipse. Гуглил месяцами, и ханвт не нашел ничего хорошего. Пожалуйста.

источник

как можно установить swing/matisse на eclipse?

1 Ответ

Как уже упоминалось в downloads.myeclipseide.com ,

Прямой доступ к области загрузки MyEclipse не разрешен. Пожалуйста, перейдите в область загрузки портала MyEclipse, чтобы загрузить MyEclipse Enterprise Workbench.

Таким образом, вы можете загрузить полный дистрибутив myeclipse, но не один плагин в vanilla eclipse.

Кроме того, возрожденный Eclipse VE (визуальный редактор) (архивируется с июня 2011 года, теперь архивируется как проект sourceforge) может быть хорошей альтернативой

Похожие вопросы:

Я ищу лучший swing редактор rite теперь я искал eclipse плагин, который является Swing плагин . Существуют ли какие-либо другие плагины для разработки Swing приложений. что можно установить в.

Я только что установил Eclipse 3.4 и обнаружил, что еще нет плагина для создания Swing приложений. Я также обнаружил, что есть реализация Matisse в MyEclipse IDE, но я хотел бы теперь узнать, есть.

Между Eclipse/SWT или Netbeans/Matisse, что дает вам любой редактор Java GUI с точки зрения быстрого развития и ремонтопригодности?

есть ли способ установить строку ключа-значения Map / Pair в JCombobox Netbeans Swing Matisse, используя только GUI ? Ниже скриншот позволяет вставить один список но есть ли способ вставить пару.

Читайте также:  Установка впускного коллектора лансер 9

Я обновил свой Eclipse с Индиго на Юнону 4.2, но не нашел Swing Plugin для Eclipse. Мне нужен swing в Eclipse, мне не нравится NetBeans, значит, есть какой-то способ использовать Swing в Eclipse.

Есть ли способ изменить тип компонента при использовании Matisse в NetBeans? Я хотел бы переключить стандартный JDesktopPane на свою собственную расширенную версию. Спасибо!

У меня есть код swing, который был сгенерирован с помощью NetBeans Matisse. Со временем файл формы был потерян. Как воссоздать файл формы Matisse?

Эй, я использую Eclipse Helios в Ubuntu, и я хотел бы установить плагин для eclipse, который работает с swing. Итак, я нашел визуальный редактор на этом сайте http://www.eclipse.org/vep/downloads/ и.

Возможно ли на Swing установить TitledBorder прозрачным, чтобы фоновое изображение просвечивало?

У меня уже есть приложение Java с Swing GUI, которое читает кучу файлов XML и делает некоторые графики на основе информации, найденной в этих файлах XML. Теперь меня попросили превратить это.

источник

10 возможностей быть продуктивнее с Eclipse для Java разработчиков

Многие из вас знают, как эффективно повышает производительность использование горячих клавиш, шаблонов кода и очень клёвой строки поиска (Quick Access), но я бы хотел рассказать о десяти возможностях, которые знают не все.

1. Code Recommenders

Code Recommenders – восхитительный умный плагин, подсказывающий код при написании. Раньше когда мы нажимали Ctrl+Space, мы видели все методы, переменные и шаблоны, многие из которых могли бы быть совершенно бесполезными; плагин Code Recommenders же выбирает полезные методы, которые применимы в данном случае и упорядочивает их по актуальности – по вероятности, с которой мы используем метод в данном контексте. А SnipMatch из Code Recommenders и вовсе позволяет вставлять целые блоки шаблонного кода. За подробностями и установкой сюда.


2. Type Filters

Type Filters удаляют рекомендации выбранных типов отовсюду. Просто отовсюду. Eclipse PDE разработчикам, например, постоянно мешают Label, Button и другие AWT классы, потому что они пишут на SWT, и уж тем более нет никакого смысла встречать List из AWT, если ты пишешь библиотеку. Так что заходим в Preferences… нет, не так. Нажимаем Ctrl+3 и начинаем вводить “Type Filters”, заходим на соответствующую страницу настроек и если необходимо добавляем java.awt* и javax.swing*.

3. Favorites

Бывает и другой случай – когда хочется всегда видеть какие-нибудь сердцу родные статические методы. Например, я часто использую предусловия из библиотеки Guava – Preconditions.checkArgument(boolean) и Preconditions.checkNotNull(T), которые являются настолько базовой необходимостью, что при настройке Eclipse я сразу захожу в Favorites и добавляю туда com.google.common.base.Preconditions.

4. Organize imports on save

Возможно, у кого-то уже выработался рефлекс нажимать Ctrl+Shift+O для отчистки ненужных импортов при виде желтых полосочек у верхней части вертикальной полосы прокрутки редактора, а, возможно, кто-то нажимает это сочетание клавиш безусловно перед сохранением. Но не беспокойтесь так, этого можно не делать – заходим в “Save Actions”, выбираем “Perform the selected actions on save” и убеждаемся, что “Organize imports” выбрано – теперь ненужные импорты сами будут удаляться при сохранении. Кстати там же есть ещё множество полезных действий, таких как расстановка недостающих аннотаций Override, удаление ненужных преобразований типов, удаление мёртвого кода или форматирование только отредактированных строк, и даже имеются такие “весёлые” возможности, как преобразование обычных for в foreach или безымянных классов в лямбды.

5. Display

Display – это такая вьюшка (view), которая даёт вам силу использовать отладчик как настоящий ниндзя. Код из вьюшки Display запускается в контексте текущей отладки. Пишем строчку кода, выделяем её, нажимаем Ctrl+U, и код запускается, а нажимаем Ctrl+Shift+V – код не только запускается, но и результат его вызова печатается рядом с нашим кодом в Display. Помимо этого, выделенный текст можно отправить в Watch Expressions. Все эти действия также имеются на панели инструментов вьюшки.

Замечания
  • Любой выделенный текст можно отправить в Watch Expressions командой “Watch”. Для этой команды нет хоткея по умолчанию, но вы ведь знаете, что в Eclipse любой команде можно назначить коткей.
  • Клавиши Ctrl+U и Ctrl+Shift+V работают и в том случае, если вы выделяете текст прямо в редакторе кода; в случае нажания Ctrl+Shift+V результат будет показан в вылетающем окошке.

6. Show Logical Structure

Одна из неприятнейших вещей при отладке – это ковыряться с содержимым TreeMap или LinkedList, потому что во вьюшке Variables они представлены неудобным образом, что соответствует их реальной структуре, но не соответствует логической структуре. Кнопочка “Show Logical Structure” на панели инструментов вьюшки Variables как раз делает так, чтобы мы видели содержимое таких коллекций (и не только) в удобном для нас виде. Заодно эта кнопка меняет вид отображения объектов при наведении мышкой. Эта кнопка выглядит как изображение дерева, рядом с которым слева жёлтенькая стрелочка.

7. Bookmarks

Bookmarks – собственно, вьюшка для работы с закладками. Бывает полезной, когда нужно разобрать целую тонну какого-нибудь кода, поскольку позволяет переходить к “избранным местам” кода и делать заметки по ним – добавляются закладки кликом на область слева от редактора, “Add Bookmark. ”, но лучше, конечно, какой-нибудь хоткей назначить (например, Ctrl+B – всё равно он бесполезен, т.к. назначен на “Build All” по умолчанию).

8. Split Editors

9. FindBugs, Checkstyle, PMD Eclipse

Различные анализаторы кода помогают найти копи-пасту, отклонения от стандартов программирования и другие потенциальные проблемы в коде ещё до того, как эти проблемы просочились в багтрекер (и, как следствие, ухудшили мнение заказчиков о вашей компании), более того, такие анализаторы неизбежно помогают лучше понимать библиотеку Java и эффекивнее использовать сам язык. Естественно, что для многих таких полезных инструментов существует интеграция с Eclipse.

Замечу, что FindBugs, Checkstyle и PMD Eclipse все есть в Eclipse Marketplace, так что их установка происходит крайне просто через Help → Eclipse Marketplace… без гугления и посещения каких-либо сайтов.

10. Plugins

Сила Eclipse вообще в возможности использовать любые плагины, которые вам могут понадобиться, это относится не только к плагинам проверки кода. Нужен дизассемблер Java? Есть JD-Eclipse. Нужна интеграция с Maven или Apache Ivy? Есть m2e и Apache IvyDE. Не можете понять 5000 строчек кода сборки вашего проекта на Ant? Есть Ant Visualizer. Беспокоитесь о мёртвом коде? Есть Unnecessary Code Detector. Хотите “рисовать” окошки SWT с помощью WYSIWYG редактора? Есть WindowBuilder.

11. Секретная возможность

Интересоваться продуктивностью – интересоваться, как правильно пользоваться теми инструментами, что вы используете, и какие новшества в них вводятся.

А какие возможности повышают вашу производительность работы в Eclipse?

источник

Swing/SWT Integration

Summary

Swing and SWT are sometimes seen as strictly competing technologies. Some people have strong opinions on which UI toolkit to use exclusively for client applications. However, in the real world, ideological extremes are often impractical. Some valid use cases require both technologies to coexist in a single application. While mixing the two toolkits is not a simple task, it can be done, and it can be done such that the two toolkits are smoothly integrated. This article discusses the steps necessary to achieve good Swing/SWT integration. It focuses on the use case of embedding existing Swing components into an SWT-based Rich Client Platform application.

Introduction

Many existing standalone Java clients represent a large investment in Swing components. While there are compelling arguments for moving these clients to the Eclipse Rich Client Platform (RCP), the full migration of a large existing application can be expensive. By retaining some Swing components, the initial cost of migration can be reduced. Over time, Swing components may be incrementally converted to SWT if and when it becomes necessary.

For example, at SAS we have extended the standard Swing JTable component to create an enhanced table that meets the needs of our existing applications. A large effort will be required to convert this component to SWT. Instead of waiting for an equivalent SWT table, we are able to use the Swing table component as-is in an RCP application, as shown in the screenshot below. It shows an RCP application running on the Windows XP platform. The two tables are Swing components; all other components were created with SWT.

Figure 1. Embedding Swing Table Components

We also have a large inventory of complex Swing components to display graphs and charts. Again, by mixing Swing and SWT, we can consider the conversion of these Swing components separately from the immediate needs of an application that we’d like to migrate to RCP. The screenshot below shows another RCP application with a Swing-based graph component. Everything else in the image is an SWT component. (This application may not look like an RCP application, but it is. The unusual look is due to extensive use of the Eclipse presentations API and other advanced workbench features.)

Читайте также:  Установка tor browser в archlinux

Figure 2. Embedding Graphical Swing Components

The use of Swing components with the RCP implies that two large UI toolkits will coexist in a single application and that some amount of integration is necessary to ensure UI consistency across the entire application.

SWT provides the SWT/AWT Bridge [2] as the basic infrastructure for Swing/SWT integration. However, the bridge is only the first step along the path to embedding usable Swing components in RCP applications. Much of this article is devoted to explaining the additional practices necessary for effective integration. Without these practices, the SWT/AWT Bridge is insufficient for production-quality application use. With them, you can successfully host key Swing components in RCP applications.

Integrating two independent UI toolkits is a complicated task, and it rarely produces perfect results. This article concentrates on practical techniques (and yes, even some hacks) to make the integration effective enough for use in real-world applications.

Despite the complexity, most of the practices described below can be encapsulated in a single common base class to be used when embedding Swing components. There are additional helper classes to support the implementation. An example is included with this article. See Appendix A, Example Code for more information.

Using the SWT/AWT Bridge

This article focuses on embedding AWT frames inside SWT composites. It demonstrates only one half of the SWT/AWT Bridge. Nevertheless, most of the improvements described below also apply to the other direction: embedding SWT composites inside AWT frames.

Minimally, embedding an AWT frame inside an SWT composite is just two simple lines of code

An instance of org.eclipse.swt.Composite is created with the SWT.EMBEDDED style. This style signals that an AWT frame is to be embedded ins >new_Frame method creates and returns such a frame. The frame may then be populated with AWT and/or Swing components.

The returned frame is not a standard AWT frame. By default, it is a sub >java.awt.Frame that is meant to be embedded within native applications. In fact, it is the same frame that is used to embed applets inside a browser window.

The example code shown above is deceptively simple. While SWT does much under the covers to manage the integration of the two toolkits, the scope of the bridge’s implementation is very narrow. In reality, you must do much more in your application to make the integration more consistent. These additional steps are described below in the section called “Building on the SWT/AWT Bridge”.

Platform Considerations

There are version constraints for using the SWT/AWT Bridge that differ from platform to platform.

Mac OS X also requires installation of the SWT Compatibility Libraries. See the SWT FAQ for details. Also, as of the writing of this article, the SWT/AWT Bridge on Mac OS X is not yet complete. See bug 145890 for details.

As of the writing of this article, use of the SWT/AWT Bridge causes hangs with Java 6 with the GTK look and feel on the Linux/GTK platform. Refer to Eclipse bug 91157 and Sun bug 6386791 for more information.

Multiple Event Threads

Swing/SWT integration has important threading implications. Each UI toolkit has its own event queue, and each event queue is processed by a separate thread. Most SWT APIs must be called from the SWT event thread. Swing has similar restrictions though they are not as strictly enforced. This split is the major drawback of mixing the toolkits, and it adds some complexity to the code.

Applications must be aware of the current thread, and, where necessary, schedule tasks to run on the appropriate UI toolkit thread. To schedule work on the AWT event thread, use:

To schedule work on the SWT event thread, use:

These are the same APIs used in a single-toolkit environment to keep the UI responsive while offloading long running operations to a worker thread. With Swing/SWT integration they are used for the additional purpose of moving work from one event thread to another.

The use of multiple event threads increases the risk of deadlock. Whenever possible, try to avo >SwingUtilities.invokeAndWait from the SWT event thread and avo >Display.syncExec from the AWT event thread. Otherwise, if there’s ever a case where one blocking call is made while the other thread has made its own blocking call in the other direction, deadlock will occur.

Building on the SWT/AWT Bridge

If you use the SWT/AWT Bridge API alone, Swing components will integrate poorly into your application. The following sections describe the integration problems in detail and suggest solutions. All of the solutions involve additional code to help manage the Swing/SWT integration. The good news is that this code can be encapsulated in a single custom embedded composite widget (and some support classes), and it can be decoupled from the rest of the application code.

Configuring the Swing Look and Feel

Here’s an example showing some very basic visual problems that result from minimal use of the SWT/AWT Bridge on the Windows platform.

Figure 3. Minimal Embedding of a Swing Component

There are some immediately obvious problems here. The header and scrollbars on the Swing JTable (upper right) differ from the SWT-based Error Log view.

In this example, the JTable is displayed with the standard Swing cross-platform (Metal) look and feel . On the other hand, the SWT components use underlying native widgets which have a native look and feel. Swing’s look and feel must be changed to match the native platform. Since the SWT/AWT Bridge itself does not automatically set the native look and feel, it’s necessary to do it yourself. For example,

Make this call once, before any AWT or Swing components are created.

Linux/GTK developers: depending on the window manager in use, the Swing system look and feel may not be set to the GTK look and feel. It may be necessary to set the GTK look and feel more explicitly:

Creating a Root Pane Container

The SWT_AWT.new_Frame() method returns an instance of a sub >java.awt.Frame that has been embedded within an SWT Composite . There are certain rules that must be followed when using an embedded frame in Swing.

The first child of the embedded frame must be a heavyweight component. The component must fill the entire frame. This heavyweight component allows for correct mouse locations and interactions. See Sun bug 4982522 for more information.

To make the frame viable for use with Swing, you must also create a root pane container ( javax.swing.RootPaneContainer ). The root pane is the basis for all Swing windows. It provides the layering capabilities on which all Swing components depend.

Due to assumptions in the Swing implementation, the root pane container should be an instance of JFrame , JDialog , JWindow , or JApplet . Of these options, only JApplet is an appropriate choice, since it is the only one that can be embedded.

To satisfy each of these rules, create a JApplet as the only child of the embedded frame. Use of JApplet does not imply that you have created a true applet with an applet’s lifecycle; you are simply using the same display container as an applet embedded in a browser.

The embedded frame is a window (a sub >java.awt.Window ). As such, it consumes resources. For this reason we encourage the use of embedded frames as replacements for larger components rather than smaller ones.

Reducing Flicker

Use of the SWT/AWT Bridge, without additional measures, causes excessive flicker in an embedded AWT frame while the application window is resized. The reasons include:

A heavyweight component ( javax.swing.JApplet , in our case) is present in the component hierarchy. The AWT implementation, by default, clears the component’s background on every resize event.

Читайте также:  Установка гбо с впрыском жидкого газа

More resize events are handled by the embedded frame, when compared to the default behavior in a standalone Swing application. This increase is due to the way resize events are passed on to the AWT frame from the enclosing SWT composite.

On Windows, set the property sun.awt.noerasebackground to reduce flicker. This undocumented property disables much of the repetitive background clearing by the AWT implementation. It should be set before any AWT or Swing components are instantiated.

The sun.awt.noerasebackground property is not used on non-Windows platforms. Reducing resize flicker on those platforms remains an open problem.

Though it is necessary, setting sun.awt.noerasebackground has negative consequences. Leaving the background uncleared may result in the temporary display of previously drawn pixels (an example of what is sometimes called cheese) during resize operations and before the initial Swing contents are displayed.

These effects are removed by adding a resize listener to the parent SWT composite. When the composite is resized larger, exposing an unpainted region, the listener fills it immediately with the background color. The cheese is removed immediately, providing a cosmetic improvement during any delay while the embedded Swing component repaints.

Tab Traversal

Another concern of Swing/SWT integration is the behavior of the tab key when traversing between components from different toolkits. Additional work is needed on the AWT s >java.awt.FocusTraversalPolicy for the embedded AWT frame. The custom policy may delegate to a standard policy when tabbing within the frame, but it must transfer control to an SWT component when:

Implementing the forward and backward traversals in the custom policy is simple. However, implementing a proper getDefaultComponent method is tricky. It must return null when nothing in the embedded AWT frame has focus. This behavior is a hack based on assumptions about how AWT will call the method, and it is necessary to avo >EmbeddedChildFocusTraversalPolicy in Appendix A, Example Code.

See the Swing documentation for the AWT Focus Subsystem for more information on focus traversal policies.

Modal Dialogs

When a modal dialog is opened from a Swing component, it must be modal across the entire application. Since SWT and AWT have separate event threads, such dialogs are not modal by default. The SWT event thread must be explicitly disabled during the time that a Swing modal dialog is showing. This effect is most easily achieved by opening a modal SWT dialog while the Swing dialog is showing.

The 0 x 0 size prevents the shell from being seen. The focus listener makes sure that control is restored to the Swing dialog if the SWT window somehow gains focus. (For example, the SWT window may gain focus when the user navigates to your application through some window managers.)

On Linux/GTK, even a zero-sized SWT dialog may appear as a small dot on the screen. H >focusGained() . This addition is unnecessary under Windows and actually causes a flash, so make the call only when required.

The code shown above ensures correct modal behavior, but how should it be invoked? The easiest approach is to invoke it wherever Swing modal dialogs are created. However, this solution won’t work if your Swing component library cannot be modified, or if you cannot introduce dependencies on SWT code from the Swing component library.

Alternatively, correct modal behavior is enforced more cleanly by installing a listener for all AWT window events. Whenever it is detected that a Swing modal dialog is open or visible, a SWT modal dialog must be opened. The listener is sketched below and is fully implemented in the example code. See Appendix A, Example Code for more information.

Dismissing Pop-up Menus

When a context menu is displayed in an embedded AWT frame, the menu does not disappear after clicking outside the frame. This AWT limitation is well known, but it is especially noticeable in embedded frames since it may result in multiple visible pop-ups within the same SWT shell.

This issue is documented in Sun bugs 4311449 and 4290715, among others.

There are partial workarounds to this problem:

Manually dismiss Swing pop-ups when the user activates other windows. Install a listener for window focus events on the embedded frame. On a focus lost event, the window and component hierarchies of the frame can be searched for instances of javax.swing.JPopupMenu .

This workaround applies to JRE version 1.4 and earlier; it should not be necessary if you are using version 1.5 or later.

Manually dismiss Swing pop-ups when the user activates an SWT menu. Install a display filter to listen for SWT.Show events which are generated whenever an SWT menu is shown. In the filter’s event handler, visible Swing pop-ups can be dismissed as described above.

Despite these workarounds, some issues remain; for example, Swing pop-ups are not dismissed when the user interacts with the titlebar on the workbench window.

Synchronizing with System Settings

When the user changes font settings through the Windows control panel, the changes are not always properly propagated to Swing components. This problem is especially noticeable when integrating with SWT since the SWT components do, in fact, recognize these changes. To work around the problem, manually change the font in the Swing Windows Look and Feel when the system font has changed.

Fortunately, in Eclipse 3.2, a new SWT event has been added to allow applications to detect changes to system settings. So, Swing font changes can be triggered as follows

Font changes for Swing components are best handled through the look and feel, rather than updating the font for individual components.

First, the SWT font is converted to an equivalent AWT font. AWT font sizes always assume a 72 dpi resolution. The true screen resolution must be used to convert the platform font size into an AWT point size that matches when displayed. Then, the font for various Swing component types is changed via the look and feel’s javax.swing.UIManager .

See the example code (Appendix A, Example Code) for the complete implementation.

Keystroke Contention

Unexpected results can occur if you map the same keystroke to a global action in your RCP application and to a handler in an embedded Swing component. Keystrokes defined through the org.eclipse.ui.bindings extension point will take precedence over those defined in the Swing component, even if the Swing component has focus. In this case, the RCP binding is managed through a Display filter, so the keystroke is consumed before it reaches the Swing component at all. As a result, there is no simple, general workaround to avo >

Using the org.eclipse.ui.contexts extension point to organize key bindings that should not be visible when the Swing component is in focus.

Replicate the Swing component’s action in an RCP action, bound to the same keystroke. The binding for RCP action can be introduced through an org.eclipse.ui.contexts extension. The action can be implemented to invoke the underlying the Swing action. This approach may be necessary anyway, if you want the action to be available anywhere outside the Swing component (for example, in the application’s main menu).

There are also occasional issues with keystroke contention between the embedded Swing component and the window system. For example, hitting Shift-F10 from inside many Swing components opens a context (popup) menu. In Windows, when there is no context menu, the default processing of the F10 keystroke (with or without shifting) transfers focus to the application’s main menu bar. When you have embedded Swing components, these two behaviors conflict. The Swing component properly handles Shift-F10, showing the popup, but the containing SWT shell does not know it; therefore, it reports the keystroke to Windows as unhandled. Windows then transfers focus to the main menu bar, and the popup loses focus.

Fortunately, this conflict can be resolved. Here’s some code which exploits the fact that the default Windows behavior happens when F10 is released, rather than when it is pressed. The embedded composite can install a KeyListener and consume the release of the Shift-F10 keystroke so that Windows never sees it.

источник

Добавить комментарий