Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ищем решение оптимальнее, обновить имедж 
:(
    Опции темы
dorogoyIV
Дата 28.2.2009, 16:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1503
Регистрация: 26.3.2007

Репутация: 36
Всего: 46



не устраивает то, что надо постоянно делать невидимым, что бы сфотать рабочий стол, еще перерисовываться не успевает

давно меня мучил этот вопрос...
если кто то что то подобное делал, поделитесь решением плз.

забыл: запускать лучше под джава 1.6 - там трэй работает

Это сообщение отредактировал(а) dorogoyIV - 28.2.2009, 17:01

Присоединённый файл ( Кол-во скачиваний: 12 )
Присоединённый файл  SpiderClock.jar 29,60 Kb
PM MAIL   Вверх
Kangaroo
Дата 28.2.2009, 23:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


AA - Aussie Animal
****


Профиль
Группа: Участник Клуба
Сообщений: 2042
Регистрация: 7.10.2006
Где: US

Репутация: 15
Всего: 104



Я так и не понял вопроса.. А эта фраза вообще взрывает мозг:
Цитата(dorogoyIV @  28.2.2009,  16:51 Найти цитируемый пост)
не устраивает то, что надо постоянно делать невидимым, что бы сфотать рабочий стол, еще перерисовываться не успевает




--------------------
Lost....
PM MAIL MSN   Вверх
dorogoyIV
Дата 1.3.2009, 02:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1503
Регистрация: 26.3.2007

Репутация: 36
Всего: 46



щас оно работает так: когда паучок останавливается, делается снимок с эрана, но что бы самого себя не фотало, приходится делать setVisible(false), поэтому перед движением паучок пропадает и сразу появляется. вот это моргание мне и не нравится
PM MAIL   Вверх
Connie
Дата 1.3.2009, 09:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 382
Регистрация: 12.8.2008

Репутация: 8
Всего: 9



dorogoyIV, А почему заранее не просчитать путь куда он идет, а потом последовательно прорисовывать по этому пути? С точки зрения пользователя он так и будет видеть паучка.

Т.е. делаем массив Vector<Image> где храним увеличенные, пускай на 10 пикселов скриншотики. Часть времени перемещаем паучка в этом маленком квадрате потом переходим к следующему квадрату из вектора, делаем еще один скриншот, помещаем его в конец списка, а ненужный уже освобождаем.

Как то так, сегодня попробую сделать, но только движение буду делать по диагонали, что бы не заморачиваться smile

Код


package splash;

import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import javax.swing.border.BevelBorder;

import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
class PopupWindow extends JFrame
                  implements ActionListener
{
 Dimension d=getToolkit().getScreenSize();
 Image image;
 Image spider;
 PopupWindow()
 {
  spider = new ImageIcon(PopupWindow.class
            .getResource("images/spider.gif")).getImage();
  setBounds(100,100,400,300);
  setLayout(new FlowLayout());
  JButton jb=new JButton("Show window");
  add(jb);
  jb.addActionListener(this);
 }
 public void actionPerformed(ActionEvent e)
 {
  MyWindow w=new MyWindow();
  w.setVisible(true);
 }
 class MyWindow extends JWindow
                implements Runnable
 {
  private final MyImage im;
  MyWindow()
  {
   setBounds(0, 0, 200, 200);
   im =  new MyImage();
   add(im);
   setAlwaysOnTop(true);
   new Thread(this).start();
  }
  public void run()
  {
   while(true)
   {
    try
    {
     Point where = new Point(2,2);
     for(int i=0;i<50;){
         Thread.currentThread().sleep(100);
         im.repaint(where);
         where.setLocation(where.x+2, where.y+2);
         
     }
     Thread.currentThread().sleep(3000);
    }
    catch(Exception ex){}
    dispose();
    return;
   }
  }
 }
 class MyImage extends JComponent
 {
  private Point loc;
  MyImage()
  {
      loc = new Point(0,0);
   try
   {
    Robot r=new Robot();
    image=r.createScreenCapture(
               new Rectangle(0 , 0, 200, 200));
   }
   catch(Exception ex){}
  }

  public void repaint(Point newloc){
         loc = newloc;
         this.repaint();
  }

  @Override
  public void paint(Graphics g)
  {
   g.drawImage(image, 0, 0, this);
   g.drawImage(spider, loc.x, loc.y, this);
   /*g.setColor(Color.yellow);
   g.setFont(new Font("", Font.BOLD, 20));
   g.drawString("image", 20, 20);*/
  }
 }
 public static void main(String [] args)
 {
  JFrame f=new PopupWindow();
  f.setVisible(true);
  f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 }
}




Это сообщение отредактировал(а) Connie - 1.3.2009, 09:31

Присоединённый файл ( Кол-во скачиваний: 8 )
Присоединённый файл  Splash.jar 26,03 Kb
PM MAIL WWW   Вверх
Platon
Дата 1.3.2009, 09:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1801
Регистрация: 25.4.2006

Репутация: 4
Всего: 40



Паучек зачетный, но не катит.
Как-то я тоже пробовал заняться этой проблемой и написать PureJavaAlphaWindow, но ничего не вышло, потому что экран надо фоткать каждый раз перед перерисовкой!!!
А то получится, как на картинке.

Присоединённый файл ( Кол-во скачиваний: 22 )
Присоединённый файл  spider.png 12,23 Kb
PM MAIL ICQ   Вверх
Connie
Дата 1.3.2009, 10:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 382
Регистрация: 12.8.2008

Репутация: 8
Всего: 9



даже часто кадрируя можно получить такие странности smile
user posted image

Это в линукс, я просто перешел на другой рабочий стол
PM MAIL WWW   Вверх
Kangaroo
Дата 1.3.2009, 12:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


AA - Aussie Animal
****


Профиль
Группа: Участник Клуба
Сообщений: 2042
Регистрация: 7.10.2006
Где: US

Репутация: 15
Всего: 104





--------------------
Lost....
PM MAIL MSN   Вверх
Connie
Дата 1.3.2009, 15:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 382
Регистрация: 12.8.2008

Репутация: 8
Всего: 9



Вот еще вариант, правда все равно не красиво. И перерисовывается когда паучка таскаешь, а вот когда окна снизу таскаешь, то нет :(

P.S. В линуксе окно можно таскать и без заголовка, для windows включите декорацию окна
Код

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;


public class TransparentBackground extends JComponent{
   private JFrame frame;
   private Image background;

   public TransparentBackground(JFrame frame) {
       this.frame = frame;
       updateBackground();
   }

   public void updateBackground() {
       try {
           Robot rbt = new Robot();
           Toolkit tk = Toolkit.getDefaultToolkit();
           Dimension dim = tk.getScreenSize();
           background = rbt.createScreenCapture(
                   new Rectangle(0, 0, (int) dim.getWidth(),
                           (int) dim.getHeight()));
       } catch (Exception ex) {
           ex.printStackTrace();
       }
   }

   public void paintComponent(Graphics g) {
       Point pos = this.getLocationOnScreen();
       Point offset = new Point(-pos.x, -pos.y);
       g.drawImage(background, offset.x, offset.y, null);
   }

   private static class TransparentComponentListener
           implements ComponentListener {

       public void componentResized(ComponentEvent e) {
           Component[] components = ((JFrame) e.getComponent())
                   .getContentPane().getComponents();
           components[0].repaint();
       }

       public void componentMoved(ComponentEvent e) {
           componentResized(e);
       }

       public void componentShown(ComponentEvent e) {
           componentResized(e);
       }

       public void componentHidden(ComponentEvent e) {
           componentResized(e);
       }
   }

   public static void main(String[] args) {


       JFrame frame = new JFrame("Transparent Window");
       frame.addComponentListener(new TransparentComponentListener());
       frame.setUndecorated(true);

       TransparentBackground bg = new TransparentBackground(frame);
       bg.setLayout(new BorderLayout());
       JButton button = new JButton("This is a button");
       button.addActionListener(new ActionListener(){
           public void actionPerformed(ActionEvent e) {
            System.exit(0);
           }
       });
       bg.add("North", button);
       //JLabel label = new JLabel(createImageIcon("images/spider.gif"));
       
       JLabel label = new JLabel(createImageIcon("images/spider.gif"));
       bg.add("Center", label);


       //bg.add( label,BorderLayout.SOUTH);

       frame.getContentPane().add("Center", bg);
       frame.pack();
       frame.setSize(200, 200);
       frame.setAlwaysOnTop(true);
       frame.show();

       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       for(int i=0;i<150;i++){
           try {
                    Thread.sleep(50);
           } catch (Exception e) {}
           frame.setLocation(2*i,2*i);
       }

   }
   protected static ImageIcon createImageIcon(String path) {
        java.net.URL imgURL = TransparentBackground.class.getResource(path);
        if (imgURL != null) {
            return new ImageIcon(imgURL);
        } else {
            System.err.println("Couldn't find file: " + path);
            return null;
        }
   }
}


Но это уже так, просто упражнялся smile

Присоединённый файл ( Кол-во скачиваний: 5 )
Присоединённый файл  spider.jar 25,74 Kb
PM MAIL WWW   Вверх
Connie
Дата 1.3.2009, 15:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 382
Регистрация: 12.8.2008

Репутация: 8
Всего: 9



Цитата
Посмотрите тут (прозрачность можно делать в j6upd10) и комменты к багу 
Посмотрел, попробовал, когда таскаешь овал, то вылезают те же артефакты, что и в примерах выше, т.е. дерганье заднего фона smile

Может инженеры sun пошли тем же путем? smile
PM MAIL WWW   Вверх
Platon
Дата 1.3.2009, 17:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1801
Регистрация: 25.4.2006

Репутация: 4
Всего: 40



Connie, это вы зря. Фишка важная и давно ожидаемая, а самое главное, реализовано так как надо. Осталось только, чтоб все устаканилось и лет через 5-6 можно будет в публичных проектах оформлять...

По поводу шлейфа - вспомните Winamp на Windows.
PM MAIL ICQ   Вверх
SoulKeeper
Дата 3.3.2009, 18:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 375
Регистрация: 14.1.2007
Где: Ukraine, Lviv.

Репутация: 2
Всего: 15



https://jna.dev.java.net/#demos

Можно пойти по этому пути, там демка с часиками.

P.S.
Когда кликаем по иконке в трее - паучок останавливается. Бага smile

Это сообщение отредактировал(а) SoulKeeper - 3.3.2009, 18:37
PM MAIL   Вверх
Platon
Дата 3.3.2009, 19:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1801
Регистрация: 25.4.2006

Репутация: 4
Всего: 40



SoulKeeper, я эти демки год назад смотрел, что-то не осилил и бросил это дело ^__^
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   jk1
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема »


 




[ Время генерации скрипта: 0.0536 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.