2017-05-24 1 views
0

Je suis en train de créer une application d'horloge pour le bureau dans le langage Processing 3 (Java) et je dois rendre l'arrière-plan transparent pour voir ce qui se passe derrière exemple le bureau).Création d'un arrière-plan transparent (application) dans le langage de traitement

J'ai essayé ceci:

background(0, 0, 0, 0); 

ne fonctionne pas.

Quelqu'un peut-il m'aider?

+0

Voir aussi [ "Comment obtenir JFrame transparent"] (https: // stackoverflow .com/questions/28656647/comment-obtenir-transparent-jframe) –

+0

@AndyThomas Cela ne fonctionne pas dans le traitement –

+0

S'il vous plaît être plus précis que de dire que cela ne fonctionne pas. Qu'est-ce qui s'est passé exactement quand vous avez essayé votre code? Qu'est-ce qui s'est passé exactement quand vous avez essayé la suggestion d'Andy? Avez-vous vraiment essayé la suggestion d'Andy, ou l'avez-vous regardé et ne l'avez pas essayé? –

Répondre

1

Vous allez devoir accéder à la fenêtre sous-jacente et définir la transparence de celle-ci.

Comment vous faites cela (et même si cela est possible) dépend du type de rendu que vous utilisez et de ce que votre ordinateur est capable de faire.

Voici un exemple de la façon dont vous pourriez faire avec le moteur de rendu par défaut:

import processing.awt.PSurfaceAWT; 
import processing.awt.PSurfaceAWT.SmoothCanvas; 
import javax.swing.JFrame; 

void setup() { 
    size(200, 200); 
    PSurfaceAWT awtSurface = (PSurfaceAWT) surface; 
    SmoothCanvas smoothCanvas = (SmoothCanvas) awtSurface.getNative(); 
    JFrame jframe = (JFrame)smoothCanvas.getFrame(); 
    jframe.dispose(); 
    jframe.setUndecorated(true); 
    jframe.setOpacity(.5f); 
    jframe.setVisible(true); 
} 

void draw() { 
    background(0, 128); 
} 

S'il vous plaît noter que ceci est juste un exemple de code, de sorte que vous pourriez avoir à jouer avec elle pour le faire fonctionner avec votre ordinateur et votre moteur de rendu. Mais l'idée générale est là: vous devez accéder à la fenêtre sous-jacente, puis définir la transparence de celle-ci.

Si cela ne fonctionne pas, vous aurez probablement plus de chance si vous utilisez Processing en tant que bibliothèque Java au lieu de passer par l'éditeur de traitement. Plus précisément, vous devriez pouvoir accéder à la fenêtre sous-jacente avant qu'elle ne s'affiche.

+0

"Aucune bibliothèque trouvée pour le traitement.awt.PSurfaceAWT" –

+0

@yoavsarfaty C'est juste un avertissement, pas une erreur. Et comme je l'ai dit, ce n'est qu'un exemple de code. Vous allez devoir faire du débogage et du bricolage pour le faire fonctionner sur votre ordinateur. –

+0

cela fonctionne. en quelque sorte, je ne peux pas déplacer la fenêtre –

0

Je vais essayer de vous donner quelques code Javapeut-être ceux-ci vous aider (cadre de notification transparent):

import static java.awt.GraphicsDevice.WindowTranslucency.PERPIXEL_TRANSPARENT; 
import static java.awt.GraphicsDevice.WindowTranslucency.TRANSLUCENT; 

import java.awt.Color; 
import java.awt.Font; 
import java.awt.GraphicsDevice; 
import java.awt.GraphicsEnvironment; 
import java.awt.GridBagLayout; 
import java.awt.event.ComponentAdapter; 
import java.awt.event.ComponentEvent; 
import java.awt.geom.RoundRectangle2D; 

import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.SwingUtilities; 

/** 
* 
* @author Coder ACJHP 
*/ 
public class NotifyMe extends JFrame { 

    /** 
    * 
    */ 
    private static final long serialVersionUID = 1L; 

    private JLabel label; 
    public NotifyMe() { 
     super("NotifyMe"); 
     setLayout(new GridBagLayout()); 
     addComponentListener(new ComponentAdapter() { 
      @Override 
      public void componentResized(ComponentEvent e) { 
       setShape(new RoundRectangle2D.Double(0, 0, getWidth(), getHeight(),15,15)); 
      } 
     }); 

     setUndecorated(true); 
     setSize(250, 80); 
     setAlwaysOnTop(true); 
     setLocationRelativeTo(null); 
     setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
     label = new JLabel(); 
     label.setFont(new Font("Adobe Arabic", Font.BOLD, 14)); 
     label.setBounds(0, 0, getWidth(), getHeight()); 

     label.setForeground(Color.RED); 
     add(label); 
    } 

    public void setNotifiyNote(String note) { 
     this.label.setText(note); 
    } 

    public static void main(String[] args) { 

     GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); 
     GraphicsDevice gd = ge.getDefaultScreenDevice(); 
     final boolean isTranslucencySupported = gd.isWindowTranslucencySupported(TRANSLUCENT); 

     if (!gd.isWindowTranslucencySupported(PERPIXEL_TRANSPARENT)) { 
      System.err.println("Shaped windows are not supported"); 
      System.exit(0); 
     } 

     if (!isTranslucencySupported) { 
      System.out.println("Translucency is not supported, creating an opaque window"); 
     } 

     SwingUtilities.invokeLater(() -> { 
      NotifyMe sw = new NotifyMe(); 

      if (isTranslucencySupported) { 
       sw.setOpacity(0.7f); 
      } 
     }); 
    } 
} 
+1

S'il vous plaît noter qu'il s'agit d'un [tag : processing] question, et [Processing! = Java] (https://meta.stackoverflow.com/questions/321127/processing-java). Plus précisément, ce code n'inclut pas du tout la fenêtre de traitement.Aussi s'il vous plaît essayez d'expliquer ce que fait le code au lieu de simplement coller un tas de code sans explication. –

+0

@KevinWorkman vous avez raison, il ne traite pas le code que j'ai essayé de donner un exemple.I Si il ya un problème, je peux supprimer ma réponse Ce n'est pas un gros problème. –

+0

Eh bien, le code n'aide pas vraiment l'OP, car ils travaillent dans le traitement. Le traitement gère sa propre fenêtre. Donc, créer une nouvelle fenêtre n'aide pas vraiment dans ce cas. –