Kiel krei Diafanan kaj Formita Fenestrojn en Java?

Superrigardo: En ĉi tiu artikolo ni diskutos pri la malkaŝemeco kaj malsama formita fenestrojn en Java. En java 7 Svingo subtenas ĉi tiun ĉefaĵon kaj faranta svingan UI eroj pli fleksebla kaj uzanto amika.

Enkonduko: En iu apliko, Travidebla fenestro estas postulo subteni ĝian funkcion. Nun en Java, Malkaŝemeco povas esti efektivigita. Diafana fenestro estas kreita de ŝanĝanta ĝian maldiafanecon de efektiviganta metodon vokis setOpacity sur JFrame ero. Sed ni devas kompreni ke diafana fenestro estas nur ebla se la fundamenta funkciada sistemo subtenas ĝin. Kaj ni ankaŭ devas fari certe ke la fenestro ne estas ornamita. Fari fenestron undecorated, Vi devas voki setUndecorated (Vera) Metodo. Iu tempo ĝi estas ankaŭ postulita ŝanĝi la formon de fenestra UI. Efektivigi ĝin, Ni devas voki setShape metodo ene de la componentResized metodo. Ĝi volas recalculate la formo kiam la fenestro estas resized.

Malantaŭa tero: En java UI, Subteno por translucency kaj formita fenestron estis longa tempa postulo por Svinga/AWT eroj. Por indiĝena evoluada aliro al ĉi tiuj nemoveblaĵoj estas haveblaj de longa tempa malantaŭo. Sed ĝi ne estis alirebla al kerna java eroj. En Java6 pluen, Subteno por translucency kaj formita fenestron estas havebla. Eĉ por piksela nivelo translucency estas ankaŭ subtenoj en Java7.

Tipo de subteno por translucency kaj malkaŝemeco: Java 7 Subtenas la sekvantan tri tipo de subteno.

DIAFANA: En ĉi tiu ĉefaĵo la fenestro povas havi malsamajn kolorojn sed kun la sama nivelo de maldiafaneco. Do la alpha valoro estas sama por ĉiuj la pikseloj. Ĉi tiu efiko estas taŭga por senkoloriĝi de fenestro kaj tiam laŭpaŝe malkreskoj kaj pliigas la alpha valoro.

PERPIXEL_DIAFANA: Ĉi tiu nemoveblaĵo subtenas malsaman alpha valoroj ene de la fenestro ĝi mem. Tio ĉi estas uzita senkoloriĝi elektita regionon de la fenestro.

PERPIXEL_TRAVIDEBLA: Ĉi tiu nemoveblaĵo subtenas malsamajn formojn de fenestroj prefere ol tradicia rektangulo. Se por piksela malkaŝemeco estas subtenita tiam malsamajn formojn kiel cirklo, Triangulo povas esti kreita.

Antaŭ ol ni uzas iun ajn de la supraj nemoveblaĵoj ni devas elprovi la subtenon de sub restanta funkciadan sistemon. La testo povas esti farita de uzanta metodon isWindowTranslucencySupported apartenanta al la java.Awt.GraphicsDevice klaso. Ĝi prenas la tipon de malkaŝemeco kiel enigo kaj revenas veran/falsa indiki la subtenon.

Lasi nin kontroli ekzemplan kodon efektivigi la translucency ĉefaĵo. En ĉi tiu ekzemplo ni kreis rektangulan diafanan fenestron sur teksta areo. Unue ni malfunkciigis la ornamadan manieron akiri la efikon de malkaŝemeco. Tiam ni kontrolis se la fundamenta funkciada sistemo subtenas ĝin aŭ ne. Se subtenita la efikon estas videbla sur la kadra fenestro.

Listing1: Provi montranta Translucency de JFrame fenestro

Importaĵo Java.Awt.Koloro;

Importaĵo Java.Awt.GraphicsDevice;

Importaĵo Java.Awt.GraphicsEnvironment;

Importaĵo Java.Awt.GridBagLayout;

Importaĵo Java.Awt.Evento.ComponentAdapter;

Importaĵo Java.Awt.Evento.ComponentEvent;

Importaĵo Java.Awt.Geom.Rectangle2D;

Importaĵo Javax.Svingo.JFrame;

Importaĵo Javax.Svingo.JTextArea;

Importaĵo Javax.Svingo.SwingUtilities;

Publika Klaso TransRecFrame Etendas JFrame {

/**

* Krei travideblan rektangulan kadron kun 85% Malkaŝemeco

*/

Publika TransRecFrame() {

Ekstra(“Diafana Rektangula Kadro”);

//Fiksita planon

SetLayout(Nova GridBagLayout());

//Krei tekstan areon

Fina JTextArea txtArea = Nova JTextArea(5, 50);

TxtArea.SetBackground(Koloro.CYAN);

Aldoni(TxtArea);

//Voki malfunkciigi ornamadon

SetUndecorated(Vera);

?

//Voki setShape al resize la formo kiam Widnow Estas resized

AddComponentListener(Nova ComponentAdapter() {

@Superregi

Publika Malplena ComponentResized(ComponentEvent e) {

SetShape(Nova Rectangle2D.Duoblo(0, 0, GetWidth(), GetHeight()));

}

});

//Fari la fenestron 85% Travidebla

SetOpacity(0.85F);

//Fiksita aliajn parametrojn

SetLocationRelativeTo(Null);

SetSize(200, 300);

SetDefaultCloseOperation(ELIRI_SUR_PROKSIMAN);

SetVisible(Vera);

}

Publika Senmova Malplena Ĉefa(Ŝnuro[] Args) {

//Krei grafikaĵan medion

GraphicsEnvironment genv = GraphicsEnvironment

.GetLocalGraphicsEnvironment();

//Kontroli se OSaj subtenoj Translucency

Se (Genv.GetDefaultScreenDevice().IsWindowTranslucencySupported(

GraphicsDevice.WindowTranslucency.DIAFANA)) {

Sistemo.Ekstere.Println(“OSaj subtenoj translucency”);

Nova TransRecFrame();

}

}

}

Ĉefaĵoj subteni translucency kaj formon: En Java7 estas plejparte tri ĉefaĵoj havebla subteni translucency kaj formon de fenestro.

  • Plena fenestro translucency: En ĉi tiu alproksimiĝo plena fenestro estas diafana.
  • Por pikselo translucency: En ĉi tiu alproksimiĝo parto de la fenestro estas diafana
  • Formita fenestrojn: Fari malsaman formita fenestrojn kiel ovale, Cirklo, Rektangula ktp.

Por pikselo translucency:

Ni jam vidis kiel fari kompletan fenestron diafana en la antaŭa ekzemplo. Nun ni diskutos la duan parton fari aron de pikseloj diafana de uzanta ilian fonan koloron. Estas kelkaj limoj efektivigi ĉi tiun scenaron. La fenestro ne devus esti plena ekrano kaj la sistemo devas subteni pikselan nivelon translucency. La ripozo de la procedo estas simila al la supra ekzemplo.

En la sekvanta ekzemplo ni vidos kiel pikselan nivelon translucency estas fiksita en kadro.

Listing2: Provi montranta pikselon ebenigas translucency subteno.

Importaĵo Javax.Svingo.*;

Importaĵo Java.Awt.*;

Importaĵo Java.Awt.Evento.ActionEvent;

Importaĵo Java.Awt.Evento.ActionListener;

Publika Klaso PixelTranslucency Etendas JFrame {

Publika PixelTranslucency() {

Ekstra(“Fiksita pikselan nivelon translucency”);

//Fiksita grandecon de la JFrame

SetSize(250, 250);

//Aro elmetas

GetContentPane().SetLayout(Nova GridLayout(6, 6));

//Peti pikselan fikson

Por(Int I = 0; I ≪ 16; I ){

Aldoni(Nova PixelPanel(255 – I * 12));

}

//Fiksita fonon kaj aliaj nemoveblaĵoj

SetBackground(Nova Koloro(0, 0, 0, 0));

SetLocationRelativeTo(Null);

SetVisible(Vera);

}

Publika Senmova Malplena Ĉefa(Ŝnuro[] Args) {

GraphicsEnvironment genv = GraphicsEnvironment.GetLocalGraphicsEnvironment();

//Kontroli se fenestraj subtenoj Translucency

Se (Genv.GetDefaultScreenDevice().IsWindowTranslucencySupported(GraphicsDevice.WindowTranslucency.PERPIXEL_DIAFANA)) {

Sistemo.Ekstere.Println(“OSaj subtenoj translucency”);

Nova PixelTranslucency();

}

} Privata Klaso PixelPanel Etendas JPanel {

Privata PixelPanel(Int Pixl) {

Ekstra();

SetBackground(Nova Koloro(0, 0, 255, Pixl));

}

}

}

Formita Fenestrojn:

Nun ni diskutos pri alia grava ĉefaĵo subtenita de Java7.La formita fenestron subtenas ĉiuj tipoj de formoj kio ajn esti la postulo de la uzanto. Ĉi tiu ĉefaĵo helpas vin krei ajnan formon kiel cirklo, Triangulo, plurangulo aŭ ajna ebla kompleksa formo. La setShape metodo de la fenestra klaso estas havebla por fiksanta la nemoveblaĵon. Sed denove ni devi memori tiun plenan ekranan manieron ne devus esti permesita kaj la funkciadaj sistemaj subtenoj translucency.

La sekvanta ekzemplo montras la uzadon de formita fenestron.

Listing3: La ekzempla kodo montranta la uzadon de formita fenestron.

Importaĵo Javax.Svingo.*;

Importaĵo Java.Awt.*;

Importaĵo Java.Awt.Geom.Ellipse2D;

Importaĵo Java.Awt.Geom.GeneralPath;

Publika Klaso JavaShapedWindow Etendas JFrame {

Publika JavaShapedWindow() {

Ekstra(“Aro formis Fenestron”);

//Set undecorated EKSTERE akiras efikon

SetUndecorated(Vera);

//Fiksita grandecon

SetSize(Nova Dimensio(250, 250));

//Fiksita plurangulajn nemoveblaĵojn

Plurangula plurangulo = Nova Plurangulo();

Plurangulo.AddPoint(0, 100);

Plurangulo.AddPoint(50, 0);

Plurangulo.AddPoint(100, 100);

//Fiksita la valorojn de la formo

Ellipse2D.Duobla newCircle = Nova Ellipse2D.Duoblo(0, 50, 1.0*100, 1.0*100);

//Fiksita ĝeneralajn vojajn nemoveblaĵojn

GeneralPath gpath = Nova GeneralPath();

Gpath.Almetas(Plurangulo, Vera);

Gpath.Almetas(NewCircle, Vera);

//Fiksita la vojon

SetShape(Gpath);

//Fiksita skatolan planon

GetContentPane().SetLayout(Nova BoxLayout(GetContentPane(), BoxLayout.X_AKSO));

Aldoni(Skatolo.CreateHorizontalGlue());

//Krei etikedon kaj fiksita nemoveblaĵojn

JLabel newlabel = Nova JLabel(“Java Formita fenestron”);

Newlabel.SetForeground(Koloro.Blanka);

Aldoni(Newlabel);

Aldoni(Skatolo.CreateHorizontalGlue());

//Fiksita kontentan pane fona koloro

GetContentPane().SetBackground(Koloro.Cyan);

//Fiksita lokon

SetLocationRelativeTo(Null);

SetVisible(Vera);

}

Publika Senmova Malplena Ĉefa(Ŝnuro[] Args) {

GraphicsEnvironment genv = GraphicsEnvironment.GetLocalGraphicsEnvironment();

//Kontrola OS subteno por ĉi tiu nemoveblaĵo

Se (Genv.GetDefaultScreenDevice().IsWindowTranslucencySupported(GraphicsDevice.WindowTranslucency.PERPIXEL_TRAVIDEBLA)) {

Sistemo.Ekstere.Println(“OSaj subtenoj translucency”);

Nova JavaShapedWindow();

}

}

}

Ni ankaŭ povas efektivigi kombinaĵon de du ĉefaĵoj kiel translucency kaj formita fenestron. Efektivigi tion ĉi, Voki setOpacity metodo al via kadro. La rezulta fenestro montros la sumigitan efikon. Sed ni devus memori la fundamentan funkciadan sistemon devas subteni pikselan nivelon translucency kaj piksela nivelo malkaŝemeco.

Konkludo:

En ĉi tiu artikolo ni kovris kelkajn novajn ĉefaĵojn en java7.La translucency kaj formita fenestrajn ĉefaĵojn estas vere interesa kaj fari java UIaj eroj pli fleksebla. Sed samtempe ni devas memori ke la fundamenta funkciada sistemo devus subteni ĉiuj ĉi tiuj nemoveblaĵoj. Alie la efiko ne estos videbla. Do en la apliko ĝi mem ni kontrolas la OSan subtenon kaj tiam efektivigi la efikon. La plej lasta ĉefaĵo de java permesas la ellaborantojn krei malsamajn tipojn de efiko sur la UIa flanko. Kiel ni ĉiuj scias ke rigardo kaj senti estas grava flanko de ajna UI bazita aplikon. Do la ellaboranto estas nun ekipita kun iloj fari la UI pli agrabla kaj alloga.

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

Enjoy this blog? Please spread the word :)

Follow by Email
LinkedIn
LinkedIn
Share