2016-08-16 3 views
0

Im настоящий новичок в java-кодировании и для небольшого проекта Я бы хотел, чтобы следующий код был неприкосновенным, например. все, что находится за кадром (и его содержимое), можно щелкнуть. Но я не знаю, как это сделать! Я искал везде, но ничего не нашел.Как сделать JFrame неосязаемым?

import java.awt.*; 
import java.swing.*; 

public class swag { 
    static Dimension dim = Toolkit.getDefaultToolkit().getScreenSize(); 
public static void main(String[] args)throws Exception{ 
    JLabel lb = new JLabel(); 
    lb.setFont(new Font("Century Gothic",Font.PLAIN,50)); 
    lb.setHorizontalAlignment(SwingConstants.CENTER); 
    lb.setForeground(Color.WHITE); 
    lb.setBackground(Color.BLACK); 

    JFrame f = new JFrame(); 
    f.setSize(dim.width,100); 
    f.setDefaultCloseOperation(f.EXIT_ON_CLOSE); 
    f.setUndecorated(true); 
    f.add(lb); 
    f.setVisible(true); 

    int r=255;int g=0;int b=0; 
    int a=80;int t=15; 
    while(true){ 
     while(true){ 
      lb.setText((System.currentTimeMillis()+"")); 
      f.setBackground(new Color(r--,g++,0,a)); 
      Thread.sleep(t); 
     if(r==0&&g==255){break;} 
    } while(true){ 
      lb.setText((System.currentTimeMillis()+"")); 
      f.setBackground(new Color(0,g--,b++,a)); 
      Thread.sleep(t); 
     if(g==0&&b==255){break;} 
    } while(true){ 
      lb.setText((System.currentTimeMillis()+"")); 
      f.setBackground(new Color(r++,0,b--,a)); 
      Thread.sleep(t); 
     if(b==0&&r==255){break;} 
     }}} 
}//class 

Примечание: не работали на эффективность еще :)

+2

Если вы хотите, чтобы кадр был прозрачным для событий, то я не думаю, что это возможно, лучшее, что вы можете сделать, это использовать 'java.awt.Robot' класс для обнаружения щелкнул экран местоположения, а затем, если это на кадре используйте робот, чтобы воспроизвести его за ним. – 11thdimension

+0

Я думал об этом, но как только весь синий код печати вышел, я планирую сделать его более эффективным. Я могу представить, что это займет много B с этими слушателями. – jazzboy

+0

Я не знаю, что вы подразумеваете под B, но да, это займет 2 слушателя, мышь и клавиатура. Также по моему опыту робот не является надежным, как только окно, загруженное роботом, сведено к минимуму, иногда оно перестает слушать. Лучшим решением было бы реализовать что-то в C/C++ и использовать это для обнаружения событий и загрузки его на Java с помощью JNI – 11thdimension

ответ

1

Читайте о glass pane из JFrame. Используя его, вы можете показывать компоненты пользовательского интерфейса, но блокировать все пользовательские взаимодействия.

Пример:

public class FreezePane extends JComponent { 
    public FreezePane() { 
     // trap mouse, key, and focus events 
     addMouseListener(new MouseAdapter()); 
     addMouseMotionListener(new MouseMotionAdapter()); 
     addKeyListener(new KeyAdapter()); 
     addFocusListener(new FocusListener() { 
      // do not let any component take focus while visible 
      public void focusLost(FocusEvent e) { 
       requestFocusInWindow(); 
      } 
      public void focusGained(FocusEvent e) {} 
     } 
    } 
} 

Затем просто установить стеклянную панель и сделать его видимым.

JFrame frame = new JFrame(); 
frame.setGlassPane(new FreePane()); 
frame.getGlassPane().setVisible(true); 
+0

, но блокировать все пользовательские взаимодействия. ! = GlassPane не защищает от KeyEvent (s), его необходимо потреблять() – mKorbel

Смежные вопросы