Kouman yo kreye Windows Translusid ak fòm nan Java?

Apèsi sou lekòl la: Nan atik sa a nou pral diskite sou transparans la ak diferan fenèt ki gen fòm nan Java. Nan Java 7 balanse sipòte karakteristik sa a ak fè konpozan UI balanse pi fleksib epi itilizatè zanmitay.

Entwodiksyon: Nan kèk aplikasyon, fenèt transparan se yon egzijans sipòte fonctionnalités li. Koulye a, nan Java, transparans kapab aplike. Yon fenèt translusid ki te kreye pa chanje stupidity li yo pa mete ann aplikasyon yon metòd ki rele setOpacity sou yon eleman JFrame. Men, nou dwe konprann ke yon fenèt translusid se sèlman posib si sistèm nan fonksyone kache sipòte li. Men, nou menm tou nou bezwen asire w ke fenèt la se pa sa dekore. Pou fè yon fenèt undecorated, ou bezwen rele setUndecorated (vre) metòd. Kèk tan li se tou oblije chanje fòm nan yon UI fenèt. Aplike li, nou bezwen rele setShape metòd nan metòd la componentResized. Li pral Rkalkulra fòm nan lè fenèt la rdimansyone.

Tè Retounen: Nan Java UI, sipò pou fenèt transparans ak ki gen fòm te yon demann bon bout tan pou balanse / AWT eleman. Pou gen aksè devlopman natif natal nan sa yo pwopriyete yo disponib nan tan long tounen. Men, li pa t 'aksesib a nwayo eleman Java. Nan Java6 pati, sipòte pou transparans ak fenèt ki gen fòm ki disponib. Menm pou chak transparans nivo pixel se sipòte tou nan Java7.

Kalite sipò pou transparans ak transparans: Java 7 sipòte sa yo twa kalite a nan sipò.

Translusid: Nan karakteristik sa a fenèt la ka gen koulè diferan men ki gen menm nivo stupidity. Se konsa, valè a Alpha se menm bagay pou tout piksèl yo. Sa a efè se apwopriye pou fennen sou yon fenèt ak Lè sa a, piti piti diminye ak ogmante valè a Alpha.

PERPIXEL_TRANSLUCENT: Sa a pwopriyete sipòte valè Alpha diferan nan fenèt la li menm. Sa a se itilize fennen chwazi rejyon nan fenèt la.

PERPIXEL_TRANSPARENT: Sa a pwopriyete sipòte diferan fòm ak diferan nan fenèt olye ke rektang tradisyonèl. Si pou chak transparans pixel se sipòte Lè sa a, diferan fòm ak diferan tankou sèk, triyang kapab kreye.

Anvan nou itilize nenpòt nan pwopriyete yo pi wo a nou bezwen teste sipò nan anba kouche sistèm opere. Ka tès la dwe fè lè l sèvi avèk metòd isWindowTranslucencySupported ki fè pati klas la java.awt.GraphicsDevice. Li pran di ki kalite a nan transparans kòm opinyon ak retounen vre / fo yo endike sipò nan.

Se pou nou tcheke yon kòd echantiyon aplike karakteristik nan transparans. Nan egzanp sa a nou te kreye yon rektangilè fenèt translusid sou yon zòn tèks. Premye nou te enfim mòd nan decoration jwenn efè a nan transparans. Lè sa a, nou te tcheke si sistèm nan fonksyone kache sipòte li ou pa. Si sipòte efè a se vizib sou fenèt la ankadreman.

Listing1: Egzanp ki montre transparans nan yon fenèt JFrame

enpòte java.awt.Color;

enpòte java.awt.GraphicsDevice;

enpòte java.awt.GraphicsEnvironment;

enpòte java.awt.GridBagLayout;

enpòte java.awt.event.ComponentAdapter;

enpòte java.awt.event.ComponentEvent;

enpòte java.awt.geom.Rectangle2D;

enpòte javax.swing.JFrame;

enpòte javax.swing.JTextArea;

enpòte javax.swing.SwingUtilities;

piblik klas TransRecFrame fin JFrame {

/**

* Kreye yon transparan ankadreman rektangilè ak 85% transparans

*/

piblik TransRecFrame() {

super(“Translusid Frame Rektangilè”);

//Mete Layout

setLayout(nouvo GridBagLayout());

//Kreye yon zòn tèks

final JTextArea txtArea = nouvo JTextArea(5, 50);

txtArea.setBackground(Koulè.Syan);

ajoute(txtArea);

//Rele a enfim decoration

setUndecorated(vre);

 

//Rele setShape rdimansyonman fòm nan lè widnow se rdimansyone

addComponentListener(nouvo ComponentAdapter() {

@ Pase sou desizyon

piblik anile componentResized(ComponentEvent ak) {

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

}

});

//Fè fenèt la 85% transparan

setOpacity(0.85f);

//Mete paramèt lòt

setLocationRelativeTo(zewo);

setSize(200, 300);

setDefaultCloseOperation(EXIT_ON_CLOSE);

setVisible(vre);

}

piblik estatik anile prensipal(Fisèl[] arg) {

//Kreye grafik anviwònman

Jèn Venture GraphicsEnvironment = GraphicsEnvironment

.getLocalGraphicsEnvironment();

//Tcheke si OS sipòte Transparans

si (genv.getDefaultScreenDevice().isWindowTranslucencySupported(

GraphicsDevice.WindowTranslucency.Translusid)) {

System.out.println(“OS sipòte transparans”);

nouvo TransRecFrame();

}

}

}

Features sipòte transparans ak fòm: Nan Java7 gen sitou twa karakteristik disponib nan sipòte transparans ak fòm yon fenèt.

  • Full fenèt transparans: Nan apwòch sa a fenèt konplè li se translusid.
  • Pou chak transparans pixel: Nan apwòch sa a yon pati nan fenèt la se translusid
  • Fenèt ki gen fòm: Fè diferan fenèt ki gen fòm tankou oval, sèk, rektangilè elatriye.

Pou chak transparans pixel:

Nou te deja wè ki jan fè yon translusid fenèt konplè nan egzanp lan anvan. Koulye a, nou pral diskite sou dezyèm pati a nan fè yon seri piksèl translusid lè l sèvi avèk koulè background yo. Gen kèk limit aplike senaryo sa a. Fenèt la pa ta dwe plen ekran ak sistèm nan dwe sipòte pixel transparans nivo. Rès la nan pwosedi a se menm jan ak egzanp ki pi wo a.

Nan egzanp ki anba la a nou pral wè ki jan pixel transparans nivo mete nan yon ankadreman.

Listing2: Ki montre pixel Egzanp nivo transparans sipò.

enpòte javax.swing.*;

enpòte java.awt. *;

enpòte java.awt.event.ActionEvent;

enpòte java.awt.event.ActionListener;

piblik klas PixelTranslucency fin JFrame {

piblik PixelTranslucency() {

super(“Mete transparans nivo pixel”);

//Mete gwosè nan JFrame la

setSize(250, 250);

//Mete mete deyò

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

//Rele pou anviwònman pixel

pou(Int mwen = 0; mwen < 16; mwen ){

ajoute(nouvo Komite piksèl(255 – mwen * 12));

}

//Mete background ak pwopriyete lòt

setBackground(nouvo Koulè(0, 0, 0, 0));

setLocationRelativeTo(zewo);

setVisible(vre);

}

piblik estatik anile prensipal(Fisèl[] arg) {

Jèn Venture GraphicsEnvironment = GraphicsEnvironment.getLocalGraphicsEnvironment();

//Tcheke si fenèt sipòte Transparans

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

Sistèm.soti.println(“OS sipòte transparans”);

nouvo PixelTranslucency();

}

} prive klas Komite piksèl fin JPanel {

prive Komite piksèl(Int pixl) {

super();

setBackground(nouvo Koulè(0, 0, 255, pixl));

}

}

}

Fenèt ki gen fòm:

Koulye a, nou pral diskite sou yon lòt karakteristik enpòtan ki te sipòte pa fenèt Java7.The gen fòm sipòte tout kalite fòm sa gen kondisyon an nan itilizatè a. Karakteristik sa a ede ou yo kreye nenpòt fòm tankou sèk, triyang, poligòn oswa nenpòt posib fòm konplèks. Metòd la setShape nan klas la fenèt ki disponib pou fikse estanda pou pwopriyete a. Men, ankò nou dwe sonje ke plen mòd ekran pa ta dwe pèmèt ak sistèm nan fonksyone sipòte transparans.

Egzanp sa a montre l 'la nan fenèt ki gen fòm.

Listing3: Echantiyon Kòd la ki montre l 'la nan fenèt ki gen fòm.

enpòte javax.swing.*;

enpòte java.awt. *;

enpòte java.awt.geom.Ellipse2D;

enpòte java.awt.geom.GeneralPath;

piblik klas JavaShapedWindow fin JFrame {

piblik JavaShapedWindow() {

super(“Mete gen fòm fenèt”);

//Mete undecorated OFF jwenn yon efè

setUndecorated(vre);

//Mete gwosè

setSize(nouvo Dimansyon(250, 250));

//Mete pwopriyete poligòn

Poligòn poligòn = nouvo Poligòn();

polygon.addPoint(0, 100);

polygon.addPoint(50, 0);

polygon.addPoint(100, 100);

//Mete valè yo nan fòm nan

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

//Mete pwopriyete chemen jeneral

GeneralPath gpath = nouvo GeneralPath();

gpath.append(poligòn, vre);

gpath.append(newCircle, vre);

//Mete chemen an

setShape(gpath);

//Mete Layout bwat

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

ajoute(Box.createHorizontalGlue());

//Kreye mete etikèt sou, li mete pwopriyete

JLabel newlabel = nouvo JLabel(“Java profile fenèt”);

newlabel.setForeground(Koulè.blan);

ajoute(newlabel);

ajoute(Box.createHorizontalGlue());

//Mete koulè kontni background fenèt

getContentPane().setBackground(Koulè.syan);

//Mete kote

setLocationRelativeTo(zewo);

setVisible(vre);

}

piblik estatik anile prensipal(Fisèl[] arg) {

Jèn Venture GraphicsEnvironment = GraphicsEnvironment.getLocalGraphicsEnvironment();

//Tcheke eksplwatasyon sipò pou pwopriyete sa a

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

Sistèm.soti.println(“OS sipòte transparans”);

nouvo JavaShapedWindow();

}

}

}

Nou kapab tou aplike yon konbinezon de karakteristik tankou fenèt transparans ak ki gen fòm. Pou aplike sa a, rele metòd setOpacity nan ankadreman ou. Fenèt nan rezilta ap montre efè a konbine. Men, nou ta dwe sonje sistèm nan fonksyone kache dwe sipòte pixel transparans nivo ak transparans nivo pixel.

Konklizyon:

Nan atik sa a nou te kouvri kèk karakteristik nouvo nan transparans java7.The ak karakteristik fenèt ki gen fòm yo se reyèlman enteresan, epi fè Java UI eleman pi fleksib. Men, an menm tan an nou dwe sonje ke sistèm nan fonksyone kache yo ta dwe sipòte tout sa yo pwopriyete. Sinon efè a yo pa dwe vizib. Se konsa, nan aplikasyon nan tèt li nou tcheke sipò nan OS ak Lè sa a aplike efè a. Karakteristik an dènye nan Java pèmèt devlopè yo yo kreye diferan kalite efè sou bò UI. Kòm nou tout konnen ki gade e santi se yon aspè enpòtan nan nenpòt aplikasyon UI ki baze sou. Se konsa, se pwomotè a kounye a ekipe ak zouti fè UI a plis Pleasant ak atire.

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

Enjoy this blog? Please spread the word :)

Follow by Email
LinkedIn
LinkedIn
Share