Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: GUI и Java FX приложения > Компонент поверх компонента


Автор: Keyo 16.10.2008, 23:08
Вот тут есть похожая тема
http://forum.vingrad.ru/forum/topic-232422.html
Но у меня проблема в том что если один компонент, с альфа бэкграундом, полностью перекрывает другой, то тот другой вовсе не прорисовывается, однако если верхний компонент не перекрывает хотя бы полоску в 1px, то нижний отрисовывается. Собственно вопрос - как можно заставить нижний компонент прорисовываться, даже если он перекрыт полностью?

Автор: dorogoyIV 17.10.2008, 12:45
Код

 public void paintComponent(Graphics g)
 {
  super.paintComponent(g);
  ...
  ...
 }

Автор: Keyo 17.10.2008, 16:35
В конце концов сделал так...
У компонента 

Код

setOpaque(false);

//+ к этому
setBackground(new Color(200,200,200,200));

//далее переопределить 

@Override
public void paint(Graphics g) {
    try {
      g.setColor(getBackground());
      g.fillRect(0,0, getWidth(), getHeight());


   } finally {

     g.dispose();
  }
}



Почему-то сразу не догадался что главное setOpaque(false); иначе все равно компонент находящийся под данным, прорисовываться не будет.

Автор: dorogoyIV 17.10.2008, 16:49
я немного не догоняю - для чего блок try{...}... в методе paint(...

Автор: Keyo 17.10.2008, 17:23
dorogoyIV, 
g.dispose(); Высвобождает ресурсы... так? В случае если не будет блока try finally и если произойдет исключение, то соответственно dispose не выполнится, в том случае конечно если исключение не было перехвачено в методе. Поэтому try/finally гарантирует что dispose() выполнится

Автор: dorogoyIV 18.10.2008, 15:21
ок.
это я недовысказал свою мысль - по моему убеждению - в методе paint/paintComponent должна происходить только перерисовка, и ничего более.
если нужно ловить Exception, то лови его в каком нибудь другом методе...
хотя ошибки в твоем коде вроде нет  smile 

Автор: Keyo 18.10.2008, 15:44
dorogoyIV, дык я не ловлю там эксепшн   smile 
try/finally гарантирует что выполнится метод dispose() объекта типа Graphics в свою очередь это как-то гарантирует высвобождение ресурсов, что по идее делает dispose(), хотя конечно это не обязательно, по скольку автоматический сборщик мусора... Но в то же время всем известно что он работает не совсем предсказуемо... поэтому и...  smile  вот

Автор: dorogoyIV 18.10.2008, 16:25
я все же думаю, что это лишнее.
ну в общем суть не меняется

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)