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


Автор: xber9 19.1.2008, 13:34
наверно большенство знает что есть qip 
все видели что при входе нового пользователя справа экрана вылезает полупрозрачное окошко

а можно ли сделать что нибуть подобно на java  
если да то как 
у меня нет идей вообще
Может кто поможет?

Автор: Kangaroo 19.1.2008, 21:52
xber9, 
видел когда-то решение в нете. Заключалось в том, что сначала делается скриншот фона, потом в всплывающем окошке кусок этой картинки вставляется как фон, ну и рисуется панель полупрозрачным цветом.
Решение очень популярное, видел во многих статьях.

Автор: dorogoyIV 20.1.2008, 10:28
примерно навалял  smile 
Код

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

class PopupWindow extends JFrame
                  implements ActionListener
{
 Dimension d=getToolkit().getScreenSize();
 Image image;

 PopupWindow()
 {
  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
 {
  MyWindow()
  {
   setBounds(d.width-120, d.height-150, 100, 100);
   add(new MyImage());
   setAlwaysOnTop(true);
   new Thread(this).start();
  }

  public void run()
  {
   while(true)
   {
    try
    {
     Thread.currentThread().sleep(3000);
    }
    catch(Exception ex){}

    dispose();
    return;
   }
  }
 }

 class MyImage extends JComponent
 {
  MyImage()
  {
   try
   {
    Robot r=new Robot();
    image=r.createScreenCapture(
               new Rectangle(d.width-120, d.height-150, 100, 100));
   }
   catch(Exception ex){}
  }

  public void paint(Graphics g)
  {
   g.drawImage(image, 0, 0, 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);
 }
}



Автор: xber9 20.1.2008, 11:28
за код псб
но есть некоторые вопросы по его пониманию
1) как увеличить размер этого окошка
2) как сделать его менее прозрачным
3) можно ли сделать именно всплывание а  не появление

Автор: dorogoyIV 20.1.2008, 12:23
1. там где видишь цифры - это размеры  smile 
2. замени класс MyWindow
Код

 int alpha=0;

...


 class MyWindow extends JWindow
                implements Runnable
 {
  MyWindow()
  {
   setBounds(d.width-120, d.height-150, 100, 100);
   add(new MyImage());
   setAlwaysOnTop(true);
   new Thread(this).start();
  }

  public void run()
  {
   while(true)
   {
    try
    {
     Thread.currentThread().sleep(10);
    }
    catch(Exception ex){}

    alpha++;
    if(alpha==255)
    {
     alpha=0;
    }
    repaint();
   }
  }
 }


   g.setColor(new Color(0, 255, 0, alpha));

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