JavaFX, exercício 3.1
package recursopa; import javafx.application.Application; import javafx.scene.Scene; import javafx.stage.Stage; import recursopa.iu.gui.PaneOrganizer; public class RecursoPA extends Application { public static void main(String[] args) { //passamos os argumentos para o subsistema gráfico os parametros launch(args); } @Override //quando começa a aplicação public void start(Stage stage) throws Exception{ PaneOrganizer po = new PaneOrganizer(); Scene scene = new Scene(po,600,400); stage.setScene(scene); //aplica a cena no stage stage.setTitle("Exercicio de programação avançada"); stage.setMinHeight(300.0); stage.setMinWidth(300.0); stage.show(); } }
package recursopa.iu.gui; import javafx.event.EventHandler; import javafx.scene.canvas.Canvas; import javafx.scene.canvas.GraphicsContext; import javafx.scene.input.MouseEvent; import javafx.scene.paint.Color; import recursopa.logica.Desenho; import recursopa.logica.Figura; public class AreaDesenho extends Canvas { Desenho desenho; public AreaDesenho(Desenho desenho) { super(100.0, 100.0); this.desenho = desenho; } public void registaListeners() { //detectar as ações do rato this.setOnMousePressed(new EventHandler<MouseEvent>() { @Override public void handle(MouseEvent t) { desenho.iniciaFigura((int) t.getX(), (int) t.getY(), (int) (Math.random() * 256), (int) (Math.random() * 256), (int) (Math.random() * 256) ); atualiza(); } }); //usando lambda functions this.setOnMouseReleased((t) -> { desenho.atualizaFigura((int) t.getX(), (int) t.getY()); atualiza(); }); this.setOnMouseDragged((t) -> { desenho.finalizaFigura((int) t.getX(), (int) t.getY()); atualiza(); }); } void apagarCanvas(GraphicsContext gc) { gc.setFill(Color.rgb(233, 233, 0)); gc.fillRect(0, 0, getWidth(), getHeight()); } //para desenhar as figuras void atualiza() { //obter as ferramentas de desenho GraphicsContext gc = getGraphicsContext2D(); apagarCanvas(gc); //rir buscar todas as figuras for (Figura fig : desenho.getListaFiguras()) { //fazer as operações sobre o GraphicsContext Color cor = Color.rgb(fig.getR(), fig.getG(), fig.getB()); gc.setFill(cor); gc.fillOval(fig.getXi(), fig.getYi(), fig.getLargura(), fig.getAltura()); } //desenhar a figura actual Figura figura = desenho.getActual(); if (figura != null){ Color cor = Color.rgb(figura.getR(), figura.getG(), figura.getB()); gc.setFill(cor); gc.fillOval(figura.getXi(), figura.getYi(), figura.getLargura(), figura.getAltura()); } } public void setDim(int w, int h) { setWidth(w); setHeight(h); atualiza(); } }
package recursopa.iu.gui; import javafx.scene.layout.Pane; import recursopa.logica.Desenho; public class PaneOrganizer extends Pane { //vai extender sempre um dos containers possiveis, extends Pane Desenho desenho; //Canvas canvas; //é uma zona de desenho AreaDesenho areaDesenho; public PaneOrganizer() { desenho = new Desenho(); criaLayout(); //para criar os componentes que vão surgir no ecrã registaListeners(); // registar os comportamentos dos objectos } void criaLayout() { //adicionar o elemento ao Pane areaDesenho = new AreaDesenho(desenho); this.getChildren().add(areaDesenho); } private void registaListeners() { areaDesenho.registaListeners(); this.widthProperty().addListener((e) -> { areaDesenho.setDim((int)PaneOrganizer.this.getWidth(), (int)PaneOrganizer.this.getHeight()); }); this.heightProperty().addListener((e) -> { areaDesenho.setDim((int)PaneOrganizer.this.getWidth(), (int)PaneOrganizer.this.getHeight()); }); } }
package recursopa.logica; import java.util.ArrayList; import java.util.List; public class Desenho { //para um conjunto de figuras, que ser´auma lista de figuras List<Figura> listaDeFiguras; Figura figuraAtual; public Desenho() { listaDeFiguras = new ArrayList<>(); } public void iniciaFigura(int x, int y, int r, int g, int b) { figuraAtual = new Figura(); figuraAtual.setRGB(r, g, b); figuraAtual.setPrimeiroPonto(x, y); figuraAtual.setSegundoPonto(x, y); } public void atualizaFigura(int x, int y) { if (figuraAtual != null) { figuraAtual.setSegundoPonto(x, y); //atualizar o segundo ponto } } public void finalizaFigura(int x, int y) { //para terminar a figura if(figuraAtual != null && listaDeFiguras !=null){ listaDeFiguras.add(figuraAtual); figuraAtual = null; } } public Figura getActual(){ return figuraAtual; } public List<Figura> getListaFiguras(){ return listaDeFiguras; } }
package recursopa.logica; public class Figura { //métodos necessários para gerir a figura int xi, yi, xf, yf; //posicao e tamanho int r, g, b; //para a cor public Figura() { } public int getXi() { return xi < xf ? xi : xf; } public int getYi() { return yi < yf ? yi : yf; } public int getXf() { return xf < xi ? xf : xi; } public int getYf() { return yf < yi ? yf : yi; } public int getR() { return r; } public int getG() { return g; } public int getB() { return b; } public void setRGB(int r, int g, int b) { this.r = r; this.g = g; this.b = b; } public void setPrimeiroPonto(int x, int y) { this.xi = x; this.yi = y; } public void setSegundoPonto(int x, int y) { this.xf = x; this.yf = y; } public int getLargura() { return Math.abs(xf - xi); //não interessa a ordem dos valores } public int getAltura() { return Math.abs(yf - yi); //não interessa a ordem dos valores } }
Tags : javafx, Programação avançada
0 thoughts on “JavaFX, exercício 3.1”