Gyakorlati alapok IV.
Végre ablakozunk! (AWT, Swing, JavaFX)
Frame-hegyek alakzatban
Pálinkó Timea rendkívül tehetséges tanítványom adott tudásszintjén a Tőle megszokott kreatív módon nyúlt hozzá tanulmányaihoz. Feladata az volt, hogy a frame-műveletek (és persze az eddigiek) megtanulását valamilyen fantáziadús ötlettel bizonyítsa be. Azonban az ötlet a programozásban nem elég: tudni kell azt ki is dolgozni. Timi a projektbe építette eddigi programozástechnikai felismeréseinek nagy részét:
-
az osztályokat az objektumorientált elveknek megfelelően funkcionálisan szétosztotta és azokat ilyen módon alkotta meg,
-
a kirajzolt ablakokat külön programszálakra helyezte (A többszálú programozás alapjai (multithread) című fejezetcsomag),
-
kényelmesen felhasznált már meglévő kódot, de képes volt azt egyénileg "személyre szabni", azaz kis módosítással saját környezetben felhasználni.
Nézzük meg a futtatható Java-kódot:
Main.java
import javax.swing.SwingUtilities;
public class Main {
public static void main(String[] args) {
WindowLeft1 winL1 = new WindowLeft1();
WindowLeft2 winL2 = new WindowLeft2();
WindowRight1 winR1 = new WindowRight1();
WindowRight2 winR2 = new WindowRight2();
WindowUp1 winU1 = new WindowUp1();
WindowUp2 winU2 = new WindowUp2();
WindowDown1 winD1 = new WindowDown1();
WindowDown2 winD2 = new WindowDown2();
SwingUtilities.invokeLater(winL1);
SwingUtilities.invokeLater(winL2);
SwingUtilities.invokeLater(winR1);
SwingUtilities.invokeLater(winR2);
SwingUtilities.invokeLater(winU1);
SwingUtilities.invokeLater(winD1);
SwingUtilities.invokeLater(winU2);
SwingUtilities.invokeLater(winD2);
}
}
Center.java
import
java.awt.GraphicsEnvironment;
import java.awt.Point;
import javax.swing.JFrame;
public class Center {
void setCenter(JFrame frame, int offset, int offset2){
Point center =
GraphicsEnvironment.getLocalGraphicsEnvironment().getCenterPoint();
int x = (int)center.getX() - (frame.getWidth() / 2 + offset);
int y = (int)center.getY() -(frame.getHeight() / 2 +offset2);
Point ablakCenter = new Point(x,y);
frame.setLocation(ablakCenter);
}
}
WindowDown1.java
import
java.awt.Color;
import javax.swing.JFrame;
public class WindowDown1 extends JFrame implements Runnable {
private int offset2YWin1 = -200;
public int getOffset2YWin1() {
return offset2YWin1;
}
public void setOffset2YWin1(int offset2YWin1){
this.offset2YWin1 = offset2YWin1;
}
@Override
public void run(){
{
JFrame frame = new JFrame();
Center center = new Center();
frame.setSize(400,300);
frame.setTitle("Alsó első ablak");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
center.setCenter(frame,0,getOffset2YWin1());
frame.getContentPane().setBackground(Color.MAGENTA);
frame.setVisible(true);
}
}
}
WindowDown2.java
import
java.awt.Color;
import javax.swing.JFrame;
public class WindowDown2 extends JFrame implements Runnable{
private int offsetYWinDown2 = -400;
public int getOffsetYWinDown2(){
return offsetYWinDown2;
}
public void setOffsetYWinDonw2(int offsetYWinDown2){
this.offsetYWinDown2 = offsetYWinDown2;
}
@Override
public void run(){
{
JFrame frame = new JFrame();
Center center = new Center();
frame.setSize(400,300);
frame.setTitle("Alsó második ablak");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
center.setCenter(frame,0,offsetYWinDown2);
frame.getContentPane().setBackground(Color.red);
frame.setVisible(true);
}
}
}
WindowLeft1.java
import
java.awt.Color;
import javax.swing.JFrame;
public class WindowLeft1 extends JFrame implements Runnable {
private int offsetXWinLeft1 = 200;
public int getOffsetXWinLeft1(){
return offsetXWinLeft1;
}
public void setOffsetXWinLeft1(){
this.offsetXWinLeft1 = offsetXWinLeft1;
}
@Override
public void run(){
{
JFrame frame = new JFrame();
Center center = new Center();
frame.setSize(400,300) ;
frame.setTitle("Bal oldali első
ablak");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
center.setCenter(frame,getOffsetXWinLeft1(), 0);
frame.getContentPane().setBackground(Color.red);
frame.setVisible(true);
}
}
}
WindowLeft2.java
import
java.awt.Color;
import javax.swing.JFrame;
public class WindowLeft2 extends JFrame implements Runnable{
private int offsetXWinLeft2 = 600;
public int getOffsetXWinLeft2(){
return offsetXWinLeft2;
}
public void setOffsetXWinLeft2(int offsetXWinLeft2){
this.offsetXWinLeft2=offsetXWinLeft2;
}
@Override
public void run(){
{
JFrame frame = new JFrame();
Center center = new Center();
frame.setSize(400,300);
frame.setTitle("Bal oldali második
ablak");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
center.setCenter(frame,getOffsetXWinLeft2(), 0);
frame.getContentPane().setBackground(Color.DARK_GRAY);
frame.setVisible(true);
}
}
}
WindowRight1.java
import
java.awt.Color;
import javax.swing.JFrame;
public class WindowRight1 extends JFrame implements Runnable {
private int offsetXWinRight1 = -200;
public int getOffsetXWinRight1(){
return offsetXWinRight1;
}
public void setOffsetXWinRight1(int offsetXWinRight1){
this.offsetXWinRight1 = offsetXWinRight1;
}
@Override
public void run(){
{
JFrame frame = new JFrame();
Center center = new Center();
frame.setSize(400,300);
frame.setTitle("Jobb oldali első
ablak");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
center.setCenter(frame,getOffsetXWinRight1(),0);
frame.getContentPane().setBackground(Color.PINK);
frame.setVisible(true);
}
}
}
WindowRight2.java
import
java.awt.Color;
import javax.swing.JFrame;
public class WindowRight2 extends JFrame implements Runnable {
private int offsetXWinRight2 = -600;
public int getOffsetXWinRight2 (){
return offsetXWinRight2;
}
public void setOffsetXWinRight2(int offsetXWinRight2){
this.offsetXWinRight2 = offsetXWinRight2;
}
@Override
public void run(){
{
JFrame frame = new JFrame();
Center center = new Center();
frame.setSize(400,300);
frame.setTitle("Jobb oldali második
ablak");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
center.setCenter(frame,getOffsetXWinRight2(),0);
frame.getContentPane().setBackground(Color.cyan);
frame.setVisible(true);
}
}
}
WindowUp1.java
import
java.awt.Color;
import javax.swing.JFrame;
public class WindowUp1 extends JFrame implements Runnable {
private int offset2YWinUp1 = 200;
public int getOffset2YWinUp1 (){
return offset2YWinUp1;
}
public void setOffset2YWinUp1(int offset2YWinUp1){
this.offset2YWinUp1 = offset2YWinUp1;
}
@Override
public void run(){
{
JFrame frame = new JFrame();
Center center = new Center();
frame.setSize(400,300);
frame.setTitle("Felső első ablak");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
center.setCenter(frame,0,getOffset2YWinUp1());
frame.getContentPane().setBackground(Color.ORANGE);
frame.setVisible(true);
}
}
}
WindowUp2.java
import java.awt.Color;
import javax.swing.JFrame;
public class WindowUp2 extends JFrame implements Runnable {
private int offset2YWinUp2 = 300;
public int getOffset2YWinUp2(){
return offset2YWinUp2;
}
public void setOffset2YWinUp2(int offset2YWinUp2){
this.offset2YWinUp2 = offset2YWinUp2;
}
@Override
public void run(){
{
JFrame frame = new JFrame();
Center center = new Center();
frame.setSize (400,300);
frame.setTitle("Felső második
ablak");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
center.setCenter(frame, 0,
getOffset2YWinUp2());
frame.getContentPane().setBackground(Color.CYAN);
frame.setVisible(true);
}
}
}
Végeredmény (a monitor közepén / felbontástól függetlenül/):