Hvordan lage gjennomsiktig og formet Windows i Java?

Oversikt: I denne artikkelen vil vi diskutere om åpenhet og ulike formede vinduer i Java. I java 7 swing støtter denne funksjonen og gjør swing UI komponenter mer fleksibel og brukervennlig.

Innledning: I noen søknad, gjennomsiktig vindu er et krav for å støtte funksjonaliteten. Nå i Java, åpenhet kan implementeres. En gjennomsiktig vindu er skapt ved å endre sin dekkevne ved å implementere en metode som kalles setOpacity på en JFrame komponent. Men vi må forstå at et gjennomsiktig vindu er bare mulig hvis det underliggende operativsystemet støtter det. Og vi må også sørge for at vinduet ikke er dekorert. For å lage et vindu udekorert, du må ringe setUndecorated (sant) metode. Noen gang er det også nødvendig å endre formen på et vindu UI. Å gjennomføre det, vi trenger å ringe setShape metode innenfor componentResized metode. Det vil beregne form når vinduet er endret.

Tilbake bakken: I java UI, støtte for gjennomskinnelighet og formet vinduet var lenge etterspørselen etter Swing / AWT komponenter. For native utvikling tilgang til disse egenskapene er tilgjengelig fra lang tid tilbake. Men det var ikke tilgjengelig for core Java komponenter. I Java6 videre, støtte for gjennomskinnelighet og formet vinduet er tilgjengelig. Selv per piksel nivå gjennomskinnelighet er også støtter i Java7.

Type støtte for gjennomskinnelighet og åpenhet: Java 7 støtter følgende tre typer støtte.

TRANSLUCENT: I denne funksjonen vinduet kan ha forskjellige farger, men med den samme grad av gjennomsiktighet. Så alfa verdien er lik for alle pikslene. Denne effekten er egnet for fade av et vindu og deretter gradvis avtar og øker alfaverdien.

PERPIXEL_TRANSLUCENT: Denne egenskapen støtter ulike alpha verdier innenfor vinduet selv. Dette brukes til å falme valgt område av vinduet.

PERPIXEL_TRANSPARENT: Denne egenskapen støtter ulike former av vinduene heller enn tradisjonell rektangel. Hvis per pixel åpenhet er støttet så forskjellige former som sirkel, trekant kan opprettes.

Før vi bruker noen av de ovennevnte egenskapene vi trenger for å teste støtte på under liggende operativsystem. Testen kan gjøres ved hjelp av metoden isWindowTranslucencySupported tilhører java.awt.GraphicsDevice klassen. Det tar den type åpenhet som input og returnerer true / false for å vise støtte.

La oss sjekke et eksempel på kode for å implementere gjennomskinnelighet funksjonen. I dette eksempelet har vi laget et rektangulært gjennomsiktig vindu på et tekstområde. Først har vi deaktivert dekorasjon modus for å få effekten av åpenhet. Da har vi sjekket om det underliggende operativsystemet støtter det eller ikke. Hvis det støttes effekten er synlig på rammen vinduet.

Listing1: Sample viser gjennomskinnelighet av en JFrame vindu

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;

offentlig klasse TransRecFrame utvider JFrame {

/**

* Lag en gjennomsiktig rektangulær ramme med 85% åpenhet

*/

offentlig TransRecFrame() {

super(“Translucent rektangulær ramme”);

//Sett layout

setLayout(nytt GridBagLayout());

//Lag et tekstområde

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

txtArea.setBackground(Farge.CYAN);

legge(txtArea);

//Ring for å deaktivere dekorasjon

setUndecorated(sant);

 

//Ring setShape å endre størrelsen på figuren når widnow er endret

addComponentListener(nytt ComponentAdapter() {

@ Override

offentlig ugyldiggjøre componentResized(ComponentEvent og) {

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

}

});

//Gjør vinduet 85% gjennomsiktig

setOpacity(0.85f);

//Angi andre parametre

setLocationRelativeTo(null);

setSize(200, 300);

setDefaultCloseOperation(EXIT_ON_CLOSE);

setVisible(sant);

}

offentlig statiske ugyldiggjøre main(String[] args) {

//Lage grafikk miljø

Youth Venture GraphicsEnvironment = GraphicsEnvironment

.getLocalGraphicsEnvironment();

//Sjekk om OS støtter Gjennomskinnelighet

hvis (genv.getDefaultScreenDevice().isWindowTranslucencySupported(

GraphicsDevice.WindowTranslucency.TRANSLUCENT)) {

System.out.println(“OS støtter gjennomskinnelighet”);

nytt TransRecFrame();

}

}

}

Funksjoner for å støtte gjennomskinnelighet og form: I Java7 det er i hovedsak tre funksjoner som er tilgjengelige for å støtte gjennomskinnelighet og formen på et vindu.

  • Full vindu gjennomskinnelighet: I denne tilnærmingen hele vinduet er gjennomskinnelig.
  • Per pixel gjennomskinnelighet: I denne tilnærmingen en del av vinduet er gjennomskinnelig
  • Formede vinduer: Gjør ulike formede vinduer som ovale, sirkel, rektangulære etc..

Per pixel gjennomskinnelighet:

Vi har allerede sett hvordan å lage en komplett vindu gjennomskinnelig i forrige eksempel. Nå vil vi diskutere den andre delen av å lage et sett med piksler gjennomskinnelige ved å bruke bakgrunnsfarge. Det er noen begrensninger som følger opp dette scenariet. Vinduet bør ikke være full skjerm, og systemet må støtte pixelnivå gjennomskinnelighet. Resten av prosedyren er lik eksempelet ovenfor.

I følgende eksempel vil vi se hvordan pixel nivå gjennomskinnelighet er satt i en ramme.

Listing2: Sample viser pixel nivå gjennomskinnelighet støtte.

importere javax.swing.*;

importere java.awt. *;

importere java.awt.event.ActionEvent;

importere java.awt.event.ActionListener;

offentlig klasse PixelTranslucency utvider JFrame {

offentlig PixelTranslucency() {

super(“Sett pixel nivå gjennomskinnelighet”);

//Sett størrelsen på JFrame

setSize(250, 250);

//Sett legge ut

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

//Ring for pixel innstilling

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

legge(nytt Pixel Panel(255 – jeg * 12));

}

//Angi bakgrunn og andre egenskaper

setBackground(nytt Farge(0, 0, 0, 0));

setLocationRelativeTo(null);

setVisible(sant);

}

offentlig statiske ugyldiggjøre main(String[] args) {

Youth Venture GraphicsEnvironment = GraphicsEnvironment.getLocalGraphicsEnvironment();

//Sjekk om vinduet støtter gjennomskinnelighet

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

System.ut.println(“OS støtter gjennomskinnelighet”);

nytt PixelTranslucency();

}

} Privat klasse Pixel Panel utvider JPanel {

Privat Pixel Panel(int pixl) {

super();

setBackground(nytt Farge(0, 0, 255, pixl));

}

}

}

Formet Windows:

Nå vil vi diskutere om en annen viktig funksjon støttes av Java7.The formet vindu støtter alle typer figurer uansett være kravet til brukeren. Denne funksjonen hjelper deg å lage en hvilken som helst form som sirkel, trekant, polygon eller eventuelle kompleks form. Den setShape metode av vinduet klasse er tilgjengelig for innstilling av egenskapen. Men igjen må vi huske at fullskjermmodus ikke bør tillates og operativsystemet støtter gjennomskinnelighet.

Det følgende eksempel viser bruken av formet vindu.

Listing3: Prøven kode som viser bruken av formet vindu.

importere javax.swing.*;

importere java.awt. *;

importere java.awt.geom.Ellipse2D;

importere java.awt.geom.GeneralPath;

offentlig klasse JavaShapedWindow utvider JFrame {

offentlig JavaShapedWindow() {

super(“Sett formet Window”);

//Sett udekorert OFF for å få en effekt

setUndecorated(sant);

//Still størrelse

setSize(nytt Dimensjon(250, 250));

//Sett polygone egenskaper

Polygon polygon = nytt Polygon();

polygon.addPoint(0, 100);

polygon.addPoint(50, 0);

polygon.addPoint(100, 100);

//Sett verdiene av figuren

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

//Angi generelle sti egenskaper

GeneralPath gpath = nytt GeneralPath();

gpath.append(polygon, sant);

gpath.append(newCircle, sant);

//Sette banen

setShape(gpath);

//Sett boksen layout

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

legge(Eske.createHorizontalGlue());

//Lag etiketten og sett egenskaper

JLabel newlabel = nytt JLabel(“Java formet vindu”);

newlabel.setForeground(Farge.hvit);

legge(newlabel);

legge(Eske.createHorizontalGlue());

//Sett innholdsruten bakgrunnsfarge

getContentPane().setBackground(Farge.cyan);

//Sett beliggenhet

setLocationRelativeTo(null);

setVisible(sant);

}

offentlig statiske ugyldiggjøre main(String[] args) {

Youth Venture GraphicsEnvironment = GraphicsEnvironment.getLocalGraphicsEnvironment();

//Sjekk OS støtte for denne eiendommen

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

System.ut.println(“OS støtter gjennomskinnelighet”);

nytt JavaShapedWindow();

}

}

}

Vi kan også gjennomføre en kombinasjon av to funksjoner som gjennomskinnelighet og formet vindu. For å gjennomføre denne, ringe setOpacity metode for å ramme inn. Resultatet vinduet vil vise den kombinerte effekten. Men vi må huske på det underliggende operativsystemet må støtte pixel nivå gjennomskinnelighet og pixel nivå åpenhet.

Konklusjon:

I denne artikkelen har vi dekket noen nye funksjoner i java7.The gjennomskinnelighet og formet vindu funksjoner er virkelig interessant og gjør java UI komponenter mer fleksibel. Men samtidig må vi huske på at det underliggende operativsystemet skal støtte alle disse egenskapene. Ellers effekten ikke vil være synlig. Så i selve programmet sjekker vi OS støtte og deretter implementere effekten. Den siste funksjonen i java tillater utviklerne å lage ulike typer effekt på UI side. Som vi alle vet at utseendet er en viktig del av enhver UI basert program. Så utvikleren er nå utstyrt med verktøy for å gjøre brukergrensesnittet mer behagelig og attraktivt.

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

Enjoy this blog? Please spread the word :)

Follow by Email
LinkedIn
LinkedIn
Share