2009-10-22 12 views
1

Je souhaite créer une application Java ayant la forme d'un «L» afin que l'application n'occupe que les bords gauche et inférieur de l'écran. Je ne veux pas non plus les bordures normales et la barre de titre en haut. J'ai vu d'autres personnes créer des cercles et d'autres formes comme ça, mais pas de formes complexes. C'est pour un ordinateur Windows XP et ne sera jamais sur un autre OS.Fenêtre de l'application java en forme de L

Alors, comment ferais-je cela?

Répondre

4

java.awt.Window/javax.swing.JWindow et java.awt.Frame/javax.swing.JFrame avec setUndecorated va créer des fenêtres sans cadre. Vous pouvez en mettre deux ou plus ensemble pour créer une forme de L. A partir de 610, Sun JRE dispose également d'une API non standard ou de fenêtres non rectangulaires et transparentes.

2

Je pense que cela devrait être possible, bien que vous deviez probablement faire attention à la disposition de vos composants. Si vous regardez here, et lisez la section sur la définition de la forme d'une fenêtre, il est écrit "La forme peut être n'importe quelle instance de l'interface java.awt.Shape". Si vous regardez ensuite l'interface Shape, java.awt.Polygon implémente cette interface. Donc, vous devriez être en mesure d'implémenter un polygone w/a "L". Donner un coup de feu.

1

Ici, vous allez Asa, c'est exactement ce dont vous avez besoin:

import com.sun.awt.AWTUtilities; 
import java.awt.Polygon; 
import java.awt.Shape; 
import java.awt.event.ComponentAdapter; 
import java.awt.event.ComponentEvent; 
import javax.swing.JFrame; 

public static void main(String[] args) 
{ 
    // create an undecorated frame 
    final JFrame lframe = new JFrame();     
    lframe.setSize(1600, 1200); 
    lframe.setUndecorated(true); 

    // using component resize allows for precise control 
    lframe.addComponentListener(new ComponentAdapter() { 
     // polygon points non-inclusive 
     // {0,0} {350,0} {350,960} {1600,960} {1600,1200} {0,1200} 
     int[] xpoints = {0,350,350,1600,1600,0}; 
     int[] ypoints = {0,0,960,960,1200,1200}; 

     @Override 
     public void componentResized(ComponentEvent evt) 
     { 
      // create the polygon (L-Shape) 
      Shape shape = new Polygon(xpoints, ypoints, xpoints.length); 

      // set the window shape 
      AWTUtilities.setWindowShape(lframe, shape); 
     } 
    }); 

    // voila! 
    lframe.setVisible(true); 
} 

reference -> "Setting the Shape of a Window"