2012-06-01 7 views
2

У меня есть приложение, которое рисует background image на panel, но для достижения оптимального пользовательского интерфейса, мне нужно установить Component фоны Transparent:Прозрачный интерфейс (+ UIManager) артефакты

Я сделал каждый компонент прозрачным с помощью Менеджер интерфейса: uimanager.put(Button, background(new color(0, 0, 0, 0); < - что-то вроде этого, это работает отлично, за исключением ..

onMouseOvercomponent перерисовывает себя (я думаю) и приводит к артефактам .. Как я могу избежать этого в UIManager?

(я создал класс: uidefaults.java со всеми настройками UIManager)

Спасибо заранее !!

+0

для лучшей помощи, прежде чем опубликовать [SSCCE] (http://sscce.org/), продемонстрировал ваши проблемы с помощью «Прозрачности» и «UIManager», иначе вам придется ждать некоторых экстрасенсов, которые опубликуют вас Правильный ответ – mKorbel

+0

Хорошо, я делаю это, когда вернусь домой, Im в настоящее время на работе –

+0

Кроме того, может оказаться полезным скриншот артефактов. – Tharwen

ответ

3

Ну, это довольно просто - НЕ используйте прозрачные цвета фона с компонентами (точнее, любым предком JComponent), которые являются OPAQUE.

Для удаления фона компонента вам не нужно, чтобы установить прозрачный цвет - просто использовать этот метод:

component.setOpaque (false); 

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

Кроме того, если вы все еще хотите иметь полупрозрачный фон позади компонента вы можете переопределить метод paintComponent так:

JLabel label = new JLabel ("Transparent background") 
    { 
     protected void paintComponent (Graphics g) 
     { 
      g.setColor (getBackground()); 
      g.fillRect (0, 0, getWidth(), getHeight()); 
      super.paintComponent (g); 
     } 
    }; 
    label.setOpaque (false); 
    label.setBackground (new Color (255, 0, 0, 128)); 

Это заставит метку, чтобы скрыть свой фон по умолчанию, а также нарисовать свой собственный фон (это зависит от свойства фона компонента).

+0

Это просто? Я сообщу вам через час, когда я вернусь домой! Спасибо –

+1

Да, это так просто. И, кстати, не используйте UIManager, если вы не хотите изменять какие-либо свойства во всем мире (они будут влиять на всех сопутствующих лиц определенного типа). Например, в вашем коде все кнопки, созданные/обновленные после того, как вы установили «Button.background», будут использовать этот фон. Если вы хотите изменить экземпляр одиночной кнопки - вызовите его методы вместо этого (в данном случае - setBackground). –

Смежные вопросы