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:

 

www.informatika-programozas.hu - Futtatható Java-kód!

 

 

 

 

 

 

 

 

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

 

www.informatika-programozas.hu - Frame-ek alakzatban és mozgásban