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


Автор: polosatij 22.3.2004, 13:39
...

Автор: AntonSaburov 22.3.2004, 14:44
На чистой JAVA такое IMHO сделать не получится.

Автор: LSD 24.3.2004, 23:08
JInternalFrame можно сделать прозрачным, правда есть проблемы с перересовкой заднего фона (не во всех режимах drag-а он корректно перересовывается, но в некоторых все ОК).

А обычный JFrame можно попробовать сделать: ставим setDefaultLookAndFeelDecorated(true) и инсталим свой LookAndFeel который рисует окно нужной геометрии. Судя по тому что окна в Metal слегка скругленны по краям, нам ничто не мешает "скруглить" их окончательно tounge.gif . Но написание своего LookAndFeel задача не из легких, это во первых. А во вторых полезная площадь окна (та которую занимает RootPane) будет равна площади вписанного прямоугольника.

Автор: AntonSaburov 25.3.2004, 12:46
Цитата
обычный JFrame можно попробовать сделать: ставим setDefaultLookAndFeelDecorated(true) и инсталим свой LookAndFeel который рисует окно нужной геометрии. Судя по тому что окна в Metal слегка скругленны по краям, нам ничто не мешает "скруглить" их окончательно

Интересное предложение smile.gif
Задача просто огромная, но теоретически возможная.

Автор: ElectricalStorm 25.3.2004, 12:53
вот например овальные кнопки я писал можно и круглые и какие хочешь

Код

import javax.swing.*;
import java.awt.*;
import java.awt.geom.Ellipse2D;


public class RoundButton extends JButton {
   public RoundButton(String label) {
       super(label);
       Dimension size = getPreferredSize();
       size.width = size.height = Math.max(size.width, size.height);

       setPreferredSize(new Dimension(50,20));
       setContentAreaFilled(false);
   }
   protected void paintComponent(Graphics g) {
       if (getModel().isArmed()) {
           g.setColor(Color.lightGray);
       } else {
           g.setColor(getBackground());
       }
       g.fillRoundRect(0,0,getSize().width - 1,getSize().height - 1, 15,15);
       //g.fillOval(0, 0, getSize().width - 1, getSize().height - 1);

       super.paintComponent(g);
   }
   protected void paintBorder(Graphics g) {
       g.setColor(getForeground());
       g.drawRoundRect(0,0,getSize().width - 1,getSize().height - 1, 15,15);
       //g.drawOval(0, 0, getSize().width - 1, getSize().height - 1);
   }
   Shape shape;
   public boolean contains(int x, int y) {
       if (shape == null || !shape.getBounds().equals(getBounds())) {
           shape = new Ellipse2D.Float(0, 0, getWidth(), getHeight());
       }
       return shape.contains(x, y);
   }

   public static void main(String[] args) {
       JButton b1 = new RoundButton("1");
       JButton b2 = new RoundButton("2");
       JButton b3 = new RoundButton("3");
       JButton b4 = new RoundButton("4");
       b1.setBackground(Color.gray); b2.setBackground(Color.gray);
       b3.setBackground(Color.gray); b4.setBackground(Color.gray);

       JFrame frame = new JFrame();
       frame.getContentPane().setBackground(Color.white);
       frame.getContentPane().add(b1);frame.getContentPane().add(b2);
       frame.getContentPane().add(b3);frame.getContentPane().add(b4);
       frame.getContentPane().setLayout(new FlowLayout());
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       frame.setBounds(300,200,150, 150);
       frame.setVisible(true);
   }
}




Автор: LSD 6.4.2004, 20:27
Я попробовал это сделать ничего не получается sad.gif . Все окно закрашивается background, причем у него даже обнуляется альфа компонента.
Единственное что у меня получилось это псевдо прозрачность, с помощью Robot создаем скриншот экрана а потом рисуем поверх него. Но то что находится под ним не обновляется sad.gif (только в ручном режиме и для этого надо спрятать окно, а это заметно взгляду). В общем для Splash screen подойдет, но для серьезного применения не годится.

Автор: Бекетов Роман aka Yaiu 6.4.2004, 21:34
Вот Нарыл
Код


import javax.swing.*;
import java.awt.*;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;


public class Tw extends JWindow
       implements MouseMotionListener, FocusListener {

   Image img, tim;
   Graphics tig;
   Point mp;

   public Tw() {
       addMouseMotionListener(this);
       setBounds(170, 170, 100, 100);
       capture();
       setVisible(true);
       addFocusListener(this);
   }

   public void focusGained(FocusEvent fe) {
       Point p = getLocation();
       setLocation(11111, 0);
       capture();
       setLocation(p);
   }

   public void focusLost(FocusEvent fe) {
   }

   public void capture() {
       Dimension d = Toolkit.getDefaultToolkit().
           getScreenSize();
       try {
           Robot r = new Robot();
           Rectangle rect = new Rectangle(0, 0,
               d.width, d.height);
           img = r.createScreenCapture(rect);
       } catch (AWTException awe) {
           System.out.println("robot excepton occurred");
       }
   }

   public void mouseDragged(MouseEvent m) {
       Point p = m.getPoint();
       int x = getX() + p.x - mp.x;
       int y = getY() + p.y - mp.y;
       setLocation(x, y);
       Graphics g = getGraphics();
       paint(g);
   }

   public void mouseMoved(MouseEvent m) {
       mp = m.getPoint();
   }

   public void paint(Graphics g) {
       if (tim == null) {
           tim = createImage(getWidth(), getHeight());
           tig = tim.getGraphics();
       }
       tig.drawImage(img, 0, 0, getWidth(), getHeight(),
               getX(), getY(), getX() +
               getWidth(), getY() + getHeight(), null);
       tig.setColor(Color.orange);
       tig.fillOval(10, 20, 70, 80);
       tig.setColor(Color.green);
       tig.fillOval(21, 16, 20, 10);
       tig.fillOval(40, 02, 11, 21);
       g.drawImage(tim, 0, 0, null);
   }

   public void cupdate(Graphics g) {
       this.paint(g);
   }

   public static void main(String[] args) {
       new Tw();
   }
}

Автор: LSD 7.4.2004, 19:58
Классная идея: не прятать окно а двигать, это по идее должно быть быстрее. baaa.gif
А метод cupdate(Graphics) для чего?

Автор: Domestic Cat 14.4.2005, 21:09
Кстати, код Бекетов Роман aka Yaiu не работает, нужно в конструктор добавить
Код

addMouseListener(new MouseAdapter()
        {
            public void mousePressed(MouseEvent m)
            {
                mp = m.getPoint();
            }
        });

Автор: Samuil 26.4.2006, 21:49
Привет Всем Программерам   smile ! Кто поможет  решить  маленькую проблемму  буду несказанно благодарен. Хочу на Яве написать JFrame  с прозрачным задним фоном.
Типо того что в коде Бекетова Романа aka Yaiu.  В коде у него все работает ОК, да вот только если прикрыть то окно  при котором запускалась прога то получится что задний фон окна не изменится (станется тем же при котором запускалась прога). Всё потому что он только в конструкторе вызывает метод capture(); Так вот мне нужно что бы обновления происходили постоянно , как часто это бывает у креков для прог! Вот у меня еще один вопрос для крутых: Как в Java проигрывать видео ролики???  Если вдруг Вы встречали это в каких нибудь книгах то хотя бы дайте название e-booka или линк с которого ее можно скачать. Заранее благодарю. smile 

moy mail 

Автор: LSD 26.4.2006, 21:58
Проблема в capture(), захват изображения экрана занимает довольно большое время. И это заметно глазу.
А всякие кейгены используют средства ОС, по созданию прозрачных окно, потому и работают без проблем.

А по поводу видео: http://java.sun.com/products/java-media/jmf/.

И на будущее просьба не задавать вопросов не связынных с темой топика. Создай отдельную тему и спроси там. 

Автор: Samuil 28.4.2006, 21:15
Уважаемые члены форума вот у меня есть 3 маленьких вопросика. 
Вопрос 1: Как можно контролировать и управлять памятью компа?

Вопрос 2: Как сделать чтобы при загрузке JFrame какая нибудь  иконка помещалась рядом с часами Windows’а как у Winamp’a и ICQ ?

Вопрос 3: Почему в JVM нет встроенной библиотеки JMF, кода пишу: import javax.media.*; он показывает что нет такой библиотеки? Как ее установить и где её скачать? 
Заранее благодарю. 

Автор: powerOn 28.4.2006, 22:25
Цитата

Вопрос 1: Как можно контролировать и управлять памятью компа?


Не понял, поясните... 

Цитата

Как сделать чтобы при загрузке JFrame какая нибудь  иконка помещалась рядом с часами Windows’а как у Winamp’a и ICQ ?


Это к JDIC, Вам сюда: https://jdic.dev.java.net/

Цитата

Почему в JVM нет встроенной библиотеки JMF, кода пишу: import javax.media.*; он показывает что нет такой библиотеки? Как ее установить и где её скачать? 


Java Media Framework не является частью JDK и вместе с ней не поставляется,
скачать её здесь можно http://java.sun.com/products/java-media/jmf/2.1.1/download.html

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

Автор: LSD 29.4.2006, 12:10
Модератор: Samuil я тебя просил не задавать вопросов не связанных с темой топика. Если у тебя есть вопрос который не попадает под тему топика, создай для него новую тему.
При рецидиве получишь read-only на неделю.


Добавлено @ 12:12 
Цитата(MoonCat @  28.4.2006,  23:25 Найти цитируемый пост)
Это к JDIC,

Еще такая штука встроена в SWT. 

Автор: Samuil 29.4.2006, 14:28
Прошу принять извенения больше не буду smile  

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