Gyakorlati alapok IV.
Végre ablakozunk! (AWT, Swing, JavaFX)
Frame-hegyek alakzatban és mozgásban
Pálinkó Timea rendkívül tehetséges tanítványom az előző fejezet (Frame-hegyek alakzatban című fejezet) megoldását gondolta tovább 1 immár "kvázimozgó" alkalmazásban. A miniprogram 20 db számozott frame-et rajzol ki szép lassan, egymás után, keresztalakzatban.
Nézzük meg a futtatható Java-kódot:
Main.java
import java.util.logging.Level;
import java.util.logging.Logger;
public class Main {
public static void main(String[] args) {
try {
WorkClass WK = new WorkClass();
WK.metodus();
} catch (InterruptedException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE,
null, ex);
}
}
}
Center.java
import java.awt.GraphicsEnvironment;
import java.awt.Point;
import javax.swing.JFrame;
public class Center {
void setCenter(JFrame frame, int offsetXWin, int offsetYWin){
Point center =
GraphicsEnvironment.getLocalGraphicsEnvironment().getCenterPoint();
int x = (int )center.getX() - (frame.getWidth() / 2 +
offsetXWin);
int y = (int) center.getY() - (frame.getHeight() / 2 +
offsetYWin);
Point ablakCenter = new Point(x,y);
frame.setLocation(ablakCenter);
}
}
WindowBasic.java
import
javax.swing.JFrame;
import java.awt.Color;
import javax.swing.JLabel;
import javax.swing.SwingConstants;
public class WindowBasic extends JFrame implements Runnable{
private int offsetXWin;
private int offsetYWin;
private String text;
private String labelText;
private int number;
public int getOffsetXWin(){
return offsetXWin;
}
public void setOffsetXWin(int offsetXWin){
this.offsetXWin = offsetXWin;
}
public String getText(){
return text;
}
public void setText(String text){
this.text = text;
}
public int getOffsetYWin(){
return offsetYWin;
}
public void setOffsetYWin (int offsetYWin){
this.offsetYWin = offsetYWin;
}
public String getLabelText(){
return labelText;
}
public void setLabelText(String labelText){
this.labelText= labelText;
}
public WindowBasic(int offsetXWin, int offsetYWin, String text, String
labelText){
}
@Override
public void run(){
{
JFrame frame = new JFrame();
Center center = new Center();
JLabel label = new JLabel();
label.setText(labelText);
frame.add(label);
label.setHorizontalAlignment(SwingConstants.CENTER);
label.setVerticalAlignment(SwingConstants.CENTER);
frame.setSize(400,300);
frame.setTitle(text);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
center.setCenter(frame, getOffsetXWin(), getOffsetYWin());
int randomR =(int)(Math.random()*255);
int randomG = (int)(Math.random()*255);
int randomB = (int)(Math.random()*255);
frame.getContentPane().setBackground(new
Color(randomR,randomG,randomB));
frame.setVisible(true);
}
}
}
WindowDown1.java
public class WindowDown1 extends WindowBasic {
public WindowDown1(int offsetXWin, int offsetYWin, String text, String
labelText){
super(offsetXWin,offsetYWin, text, labelText);
setOffsetXWin(offsetXWin);
setOffsetYWin(offsetYWin);
setText(text);
setLabelText("Ez a "+labelText+". ablak");
}
}
WindowLeft1.java
public class WindowLeft1 extends WindowBasic{
public WindowLeft1(int offsetXWin,int offsetYWin, String text, String
labelText) {
super(offsetXWin,offsetYWin, text, labelText);
setOffsetXWin(offsetXWin);
setOffsetYWin(offsetYWin);
setText(text);
setLabelText("Ez a "+labelText+". ablak");
}
}
WindowRight1.java
public class WindowRight1 extends WindowBasic {
public WindowRight1(int offsetXWin,int offsetYWin, String text, String
labelText) {
super(offsetXWin,offsetYWin, text, labelText);
setOffsetXWin(offsetXWin);
setOffsetYWin(offsetYWin);
setText(text);
setLabelText("Ez a "+labelText+". ablak");
}
}
WindowUp1.java
public class WindowUp1 extends WindowBasic {
public WindowUp1(int offsetXWin, int offsetYWin, String text, String
labelText) {
super(offsetXWin, offsetYWin, text, labelText);
setOffsetXWin(offsetXWin);
setOffsetYWin(offsetYWin);
setText(text);
setLabelText("Ez a "+labelText+". ablak");
}
}
WorkClass.java
import
java.util.concurrent.atomic.AtomicInteger;
import javax.swing.SwingUtilities;
public class WorkClass {
AtomicInteger atomicInteger = new AtomicInteger(1);
synchronized void metodus() throws InterruptedException {
String number = "";
for(int i = 0; i < 5; i++){
if(i == 0){
number = "
első ";
}
if( i == 1){
number
="második";
}
if (i == 2){
number =
"harmandik";
}
if (i == 3){
number =
"negyedik";
}
WindowLeft1 WL1 = new WindowLeft1(200,0, "Bal " +number+"
ablak",atomicInteger.toString());
atomicInteger.getAndIncrement();
WindowRight1 WR1 = new WindowRight1(-200,0, "Jobb "+number+"
ablak", atomicInteger.toString());
atomicInteger.getAndIncrement();
WindowUp1 WU1 = new WindowUp1(0,100,"Felső "+number+" ablak",
atomicInteger.toString());
atomicInteger.getAndIncrement();
WindowDown1 WD1 = new WindowDown1(0,-200, "Alső "+number+"
ablak",atomicInteger.toString());
atomicInteger.getAndIncrement();
SwingUtilities.invokeLater(WL1);Thread.sleep(500);
SwingUtilities.invokeLater(WR1);Thread.sleep(500);
SwingUtilities.invokeLater(WU1);Thread.sleep(500);
SwingUtilities.invokeLater(WD1);Thread.sleep(500);
}
}
}
Végeredmény (a monitor közepén / felbontástól függetlenül/):
20 db számozott frame megjelenítése szép lassan, egymás után, keresztalakzatban