Многослойные панели в Swing с заказной росписью - PullRequest
1 голос
/ 25 марта 2012

Я пишу картографическое приложение на Java с использованием Swing для пользовательского интерфейса (в конце этого поста я включил чертеж прототипа).Карта реализована с использованием пользовательского класса MapPanel, который расширяет JPanel.Карта извлекается с сервера в виде серии изображений (плиток) размером 300x300, которые рисуются на MapPanel при каждом вызове метода paintMap ().Из-за длины и сложности (несколько классов и т. Д.) Кода я не могу включить все это здесь, но метод paintMap () в основном работает так:

// Loop for each map tile (image, xPos, yPos)
getGraphics().drawImage(image, xPos, yPos, 300, 300, null);

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

Есть предложения о том, как реализовать свой пользовательский интерфейс без мерцания?

UI prototype

Ответы [ 2 ]

3 голосов
/ 25 марта 2012
getGraphics().drawImage(image, xPos, yPos, 300, 300, null); // WRONG!!
  1. Не звоните getGraphics() - вместо этого переопределяйте paintComponent(Graphics) JPanel или JComponent и рисуйте, когда это требуется.
  2. Используйте this как ImageObserver
0 голосов
/ 28 декабря 2012

В этой статье описывается использование JLayeredPane и абстрактного базового класса для наложения произвольных эффектов на данный компонент Swing.

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