Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Java программирование > Общие вопросы по Java, Java SE, Kotlin
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.04.2013, 20:00   #1
mir_zol
 
Регистрация: 03.12.2012
Сообщений: 8
Вопрос Swing JLayer&&LayerUI

Здравствуйте , я хотел , используя JLayer и LayerUI сделать окно с информацией на котором , мигал бы курсор , то есть для 1 слоя методы repaint и следственно paintComponent вызывается , при изменении информации , а на втором постоянно мигает курсор , то есть он постоянно перерисовывается .
Начал разбираться по java tutorials , как они там это делают , написал тестовый пример , но проблема в том , что перерисовываются постоянно 2 слоя , может быть , кто-то подскажет как от этого избавиться , или стоит использовать другой компонент . Не исключаю , что я работаю с JLayer и LayerUI координально не правильно , объясните как с ними стоит работать , если это действительно так .
Код:

package testproject;
 
 
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.beans.PropertyChangeEvent;
import javax.swing.*;
import javax.swing.plaf.LayerUI;
 
 
public class TestProject {
 
    public static void main(String[] args) {
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
          public void run() {
            createUI();
          }});
    }
    public static void createUI() {
        JFrame f = new JFrame("Wallpaper");
 
        JPanel panel = createPanel();
        LayerUI<JComponent> layerUI = new WallpaperLayerUI();
        JLayer<JComponent> jlayer = new JLayer<JComponent>(panel, layerUI);
 
        f.add (jlayer);
 
        f.setSize(300, 200);
        f.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
        f.setLocationRelativeTo (null);
        f.setVisible (true);
        
        int tick=1000;
        class TimerEvent implements ActionListener{
            @Override
            public void actionPerformed(ActionEvent e) {
                layerUI.work=!layerUI.work;
                layerUI.change();
            }
            public TimerEvent(WallpaperLayerUI layerUI) {
                this.layerUI=layerUI;
            }
            WallpaperLayerUI layerUI;
        }
        Timer timer=new Timer(tick,new TimerEvent((WallpaperLayerUI)layerUI));
        timer.start();
      }
 
  private static JPanel createPanel() {
      class Panel extends JPanel{
          @Override
          public void paintComponent(Graphics g){
              super.paintComponent(g);
              numberOfCalls++;
              System.out.println("Number of calls "+numberOfCalls);
          }
          int numberOfCalls=0;
      }
        Panel p = new Panel();
        
        ButtonGroup entreeGroup = new ButtonGroup();
        JRadioButton radioButton;
        p.add(radioButton = new JRadioButton("Beef", true));
        entreeGroup.add(radioButton);
        p.add(radioButton = new JRadioButton("Chicken"));
        entreeGroup.add(radioButton);
        p.add(radioButton = new JRadioButton("Vegetable"));
        entreeGroup.add(radioButton);
 
        p.add(new JCheckBox("Ketchup"));
        p.add(new JCheckBox("Mustard"));
        p.add(new JCheckBox("Pickles"));
 
        p.add(new JLabel("Special requests:"));
        p.add(new JTextField(20));
 
        JButton orderButton = new JButton("Place Order");
        p.add(orderButton);
        return p;
  }
  
}
class WallpaperLayerUI extends LayerUI<JComponent> {
  @Override
  public void paint(Graphics g, JComponent c) {
      super.paint(g, c);
      if(!work){
          return;
      }
    Graphics2D g2 = (Graphics2D) g.create();
 
    int w = c.getWidth();
    int h = c.getHeight();
    g2.drawString("Hello World",100,100);
    g2.dispose();
  }
  void change()
  {
      firePropertyChange("", 0, 1);
  }
  @Override
  public void applyPropertyChange(PropertyChangeEvent pce, JLayer l) {
      l.repaint();
    }
  boolean work=true;
}

Последний раз редактировалось mir_zol; 14.04.2013 в 20:09.
mir_zol вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
не перегружается ostream& operator<<(ostream &, Card&) Antej Общие вопросы C/C++ 2 17.12.2012 14:02
Вопрос по поводу меню на сайте, html&css&js antoxa22 HTML и CSS 14 30.12.2011 11:02
TForm & TImage & PNG & Прозрачность delphi_beginner Общие вопросы Delphi 7 19.09.2009 08:46
Просто не понимаю б чём проблема!!!!!!!(char* && index) artush1984 Общие вопросы C/C++ 12 30.05.2009 03:30