Sådan opretter Gennemsigtige og Shaped Windows i Java?

Oversigt: I denne artikel vil vi diskutere om gennemsigtighed og forskellige formede vinduer i Java. I java 7 swing understøtter denne funktion, og gør swing brugergrænsefladekomponenter mere fleksibel og brugervenlig.

Indledning: I nogle ansøgning, gennemsigtigt vindue er et krav for at støtte sin funktionalitet. Nu i Java, gennemsigtighed kan gennemføres. Et gennemsigtigt vindue er skabt ved at ændre dets opacitet ved at implementere en metode kaldet setOpacity på en JFrame komponent. Men vi må forstå, at et gennemsigtigt vindue er kun mulig, hvis det underliggende operativsystem understøtter det. Og vi skal også sørge for, at vinduet ikke er dekoreret. For at gøre et vindue undecorated, du nødt til at ringe til setUndecorated (sand) metode. Nogle gang er det også nødvendigt at ændre formen på et vindue UI. At gennemføre det, vi nødt til at kalde setShape metode inden for det componentResized metode. Det vil genberegne formen, når vinduet er skaleret.

Tilbage jorden: I java UI, støtte til gennemsigtighed og formet vindue var lang tid efterspørgsel efter Swing / AWT komponenter. For indfødte udvikling adgang til disse egenskaber er tilgængelige fra lang tid tilbage. Men det var ikke tilgængeligt for centrale Java-komponenter. I Java6 fremefter, støtte til translucens og formet vindue er tilgængelig. Selv per pixel niveau gennemskinnelighed også støtter Java7.

Type af støtte til gennemsigtighed og åbenhed: Java 7 understøtter følgende tre type støtte.

TRANSLUCENT: I denne funktion vinduet kan have forskellige farver, men med det samme niveau af opacitet. Så alpha værdi er ens for alle pixel. Denne effekt er velegnet til fade fra et vindue og derefter gradvist aftager og forøger alfaværdi.

PERPIXEL_TRANSLUCENT: Denne egenskab understøtter forskellige alpha værdier inden selve vinduet. Dette bruges til at falme valgte område af vinduet.

PERPIXEL_TRANSPARENT: Denne egenskab understøtter forskellige former for vinduer snarere end traditionelle rektangel. Hvis per pixel gennemsigtighed understøttes så forskellige former som cirkel, trekant kan oprettes.

Før vi bruge nogen af ​​de ovennævnte egenskaber, vi har brug for at teste støtte under liggende operativsystem. Testen kan gøres ved hjælp af metode isWindowTranslucencySupported tilhører java.awt.GraphicsDevice klasse. Det tager type transparent som input og returnerer true / false at angive support.

Lad os se et eksempel kode til at gennemføre gennemskinneligheden funktionen. I dette eksempel har vi oprettet et rektangulært gennemsigtigt vindue på et tekstområde. Først har vi deaktiveret udsmykningen tilstand for at få effekten af ​​gennemsigtighed. Så har vi kontrolleres, hvis det underliggende operativsystem understøtter det eller ej. Hvis det understøttes effekten er synlig på rammen vinduet.

Listing1: Prøve viser Gennemskinnelighed en JFrame vindue

importere java.awt.Color;

importere java.awt.GraphicsDevice;

importere java.awt.GraphicsEnvironment;

importere java.awt.GridBagLayout;

importere java.awt.event.ComponentAdapter;

importere java.awt.event.ComponentEvent;

importere java.awt.geom.Rectangle2D;

importere javax.swing.JFrame;

importere javax.swing.JTextArea;

importere javax.swing.SwingUtilities;

offentlige klasse TransRecFrame udvider JFrame {

/**

* Opret en transparent rektangulær ramme med 85% gennemsigtighed

*/

offentlige TransRecFrame() {

super(“Gennemsigtig rektangulær ramme”);

//Indstil layout

setLayout(nye GridBagLayout());

//Opret et tekstområde

endelig JTextArea txtArea = nye JTextArea(5, 50);

txtArea.setBackground(Color.CYAN);

add(txtArea);

//Ring for at deaktivere dekoration

setUndecorated(sand);

 

//Ring setShape for at ændre form, når widnow størrelse ændres

addComponentListener(nye ComponentAdapter() {

@ Override

offentlige ugyldig componentResized(ComponentEvent og) {

setShape(nye Rectangle2D.Double(0, 0, getWidth(), getHeight()));

}

});

//Gør vinduet 85% transparent

setOpacity(0.85f);

//Indstil andre parametre

setLocationRelativeTo(nul);

setSize(200, 300);

setDefaultCloseOperation(EXIT_ON_CLOSE);

setVisible(sand);

}

offentlige statiske ugyldig main(String[] args) {

//Opret grafik miljø

Ungdom Venture GraphicsEnvironment = GraphicsEnvironment

.getLocalGraphicsEnvironment();

//Kontroller, om OS understøtter Gennemskinnelighed

hvis (genv.getDefaultScreenDevice().isWindowTranslucencySupported(

GraphicsDevice.WindowTranslucency.TRANSLUCENT)) {

System.out.println(“OS understøtter gennemskinnelighed”);

nye TransRecFrame();

}

}

}

Funktioner til støtte gennemskinnelighed og form: I Java7 der hovedsagelig tre funktioner til rådighed for at støtte gennemsigtighed og formen af ​​et vindue.

  • Fuld vindue gennemskinnelighed: I denne fremgangsmåde fuld vindue er gennemskinnelig.
  • Per pixel gennemskinnelighed: I denne fremgangsmåde en del af vinduet er gennemskinnelig
  • Formet vinduer: Lave forskellige formede vinduer som ovale, cirkel, rektangulær etc..

Per pixel gennemskinnelighed:

Vi har allerede set, hvordan man laver et komplet vinduessystem gennemskinneligt i det foregående eksempel. Nu vil vi diskutere den anden del af at gøre et sæt af pixels gennemskinnelige ved at bruge deres baggrundsfarve. Der er nogle begrænsninger at gennemføre dette scenario. Vinduet må ikke være fuld skærm, og systemet skal understøtte pixel niveau gennemskinnelighed. Resten af ​​proceduren svarer til ovenstående eksempel.

I det følgende eksempel vil vi se, hvordan pixel niveau gennemskinnelighed er sat i en ramme.

Listing2: Sample viser pixel-niveau gennemskinnelighed support.

importere javax.swing.*;

importere java.awt. *;

importere java.awt.event.ActionEvent;

importere java.awt.event.ActionListener;

offentlige klasse PixelTranslucency udvider JFrame {

offentlige PixelTranslucency() {

super(“Indstil pixel niveau gennemskinnelighed”);

//Indstil størrelsen på JFrame

setSize(250, 250);

//Set lægge ud

getContentPane().setLayout(nye GridLayout(6, 6));

//Ring for pixel indstilling

for(int i = 0; Jeg < 16; i ){

add(nye Pixel Panel(255 – Jeg * 12));

}

//Indstil baggrund og andre egenskaber

setBackground(nye Color(0, 0, 0, 0));

setLocationRelativeTo(nul);

setVisible(sand);

}

offentlige statiske ugyldig main(String[] args) {

Ungdom Venture GraphicsEnvironment = GraphicsEnvironment.getLocalGraphicsEnvironment();

//Kontroller, om vinduet understøtter gennemskinnelighed

hvis (genv.getDefaultScreenDevice().isWindowTranslucencySupported(GraphicsDevice.WindowTranslucency.PERPIXEL_TRANSLUCENT)) {

System.ud.println(“OS understøtter gennemskinnelighed”);

nye PixelTranslucency();

}

} private klasse Pixel Panel udvider JPanel {

private Pixel Panel(int pixl) {

super();

setBackground(nye Color(0, 0, 255, pixl));

}

}

}

Formet Windows:

Nu vil vi diskutere om en anden vigtig funktion understøttes af Java7.The formet vindue understøtter alle typer af figurer uanset hvilket kravet om brugeren. Denne funktion hjælper dig med at skabe nogen form som cirkel, trekant, polygon eller eventuelle kompleks form. Den setShape metode af vinduet klassen er mulighed for at indstille egenskaben. Men igen skal vi huske, at fuldskærmstilstand ikke bør tillades, og styresystemet understøtter gennemskinnelighed.

Følgende eksempel viser brugen af ​​formede vindue.

Listing3: Prøven koden viser brugen af ​​formede vindue.

importere javax.swing.*;

importere java.awt. *;

importere java.awt.geom.Ellipse2D;

importere java.awt.geom.GeneralPath;

offentlige klasse JavaShapedWindow udvider JFrame {

offentlige JavaShapedWindow() {

super(“Set formet vindue”);

//Sæt undecorated OFF for at få en effekt

setUndecorated(sand);

//Indstil størrelse

setSize(nye Dimension(250, 250));

//Set polygon egenskaber

Polygon polygon = nye Polygon();

polygon.addPoint(0, 100);

polygon.addPoint(50, 0);

polygon.addPoint(100, 100);

//Indstil værdierne af formen

Ellipse2D.Double newCircle = nye Ellipse2D.Double(0, 50, 1.0*100, 1.0*100);

//Fastsætte generelle sti egenskaber

GeneralPath gpath = nye GeneralPath();

gpath.append(polygon, sand);

gpath.append(newCircle, sand);

//Sæt stien

setShape(gpath);

//Set box layout

getContentPane().setLayout(nye BoxLayout(getContentPane(), BoxLayout.X_AXIS));

add(Kasse.createHorizontalGlue());

//Opret label og sæt egenskaber

JLabel newlabel = nye JLabel(“Java Shaped vindue”);

newlabel.setForeground(Color.hvid);

add(newlabel);

add(Kasse.createHorizontalGlue());

//Indstil indholdsrude baggrundsfarve

getContentPane().setBackground(Color.cyan);

//Angiv placering

setLocationRelativeTo(nul);

setVisible(sand);

}

offentlige statiske ugyldig main(String[] args) {

Ungdom Venture GraphicsEnvironment = GraphicsEnvironment.getLocalGraphicsEnvironment();

//Tjek OS-support for denne ejendom

hvis (genv.getDefaultScreenDevice().isWindowTranslucencySupported(GraphicsDevice.WindowTranslucency.PERPIXEL_TRANSPARENT)) {

System.ud.println(“OS understøtter gennemskinnelighed”);

nye JavaShapedWindow();

}

}

}

Vi kan også gennemføre en kombination af to funktioner som gennemsigtighed og formet vindue. For at gennemføre denne, ringe setOpacity metode til din ramme. Resultatet Vinduet vil vise den kombinerede effekt. Men vi skal huske det underliggende operativsystem skal understøtte pixel niveau gennemskinnelighed og pixel-niveau gennemsigtighed.

Konklusion:

I denne artikel har vi dækket nogle nye funktioner i java7.The gennemsigtighed og formede vindue funktioner er virkelig interessant og gøre java brugergrænsefladekomponenter mere fleksible. Men samtidig skal vi huske på, at det underliggende operativsystem bør støtte alle disse egenskaber. Ellers vil effekten ikke være synlig. Så i selve programmet vi kontrollere OS support og derefter gennemføre effekten. Den seneste funktion i java gør det muligt for udviklere at skabe forskellige typer af effekt på UI side. Som vi alle ved, at udseende og er et vigtigt aspekt af enhver UI baseret applikation. Så udvikleren er nu udstyret med værktøjer til at gøre UI mere behagelig og attraktiv.

============================================= ============================================== Buy best TechAlpine Books on Amazon
============================================== ---------------------------------------------------------------- electrician ct chestnutelectric
error

Enjoy this blog? Please spread the word :)

Follow by Email
LinkedIn
LinkedIn
Share