Estou montando um programa que vai aplicar rotação, translação e escala em um polígono, no caso triângulo. Mas o JFrame que eu montei e que acredito estar correto não carrega corretamente quando executo, cada vez carrega de um jeito. Seguem o código e 3 screens. Se alguém puder ajudar ficarei grato :)
PS: O mesmo código foi executado nessas 3 imagens.
package Poligono;
//Imports
import java.awt.*;
import Poligono.Triangulo;
import javax.swing.*;
import javax.swing.border.LineBorder;
import java.awt.event.*;
import java.awt.geom.Line2D;
//Classe Poligono
public class TelaPrincipal extends JFrame
implements ActionListener{
Triangulo triangulo;
//Botões do Frame
JButton btRotacao, btLimpar, btEscala, btSair;
//Campos
JTextField tfNovoX, tfNovoY, tfAngulo, tfPosA, tfPosB, tfPosC;
//Labels dos Botões
JLabel lbNovoX, lbNovoY, lbAngulo, lbPosA, lbPosB, lbPosC;
/*Constantes para posicionar Labels do triangulo
O posicionamento consiste em: Coordenada + constante
Ex: Label A: CoordX + AX, CoordY + AY
*/
public static final int AX = -15;
public static final int AY = 20;
public static final int BX = 10;
public static final int BY = 20;
public static final int CX = -5;
public static final int CY = -10;
public TelaPrincipal(){
//Instancia o triangulo
triangulo = new Triangulo();
//Cria um Container
Container container = getContentPane();
container.setLayout(new BorderLayout());
//Cria um painel para os botões
Container pBotoes = new Container();
pBotoes.setLayout(new GridLayout(4, 1));
//Configura e acrescenta os botões no Painel de Botões
btRotacao = new JButton();
btRotacao.setText("Rotação");
pBotoes.add(btRotacao);
btEscala = new JButton();
btEscala.setText("Escala");
pBotoes.add(btEscala);
btLimpar = new JButton();
btLimpar.setText("Limpar");
pBotoes.add(btLimpar);
btSair = new JButton();
btSair.setText("Sair");
pBotoes.add(btSair);
//Posiciona o Painel de Botões ao Oeste do Frame
container.add(pBotoes, BorderLayout.WEST);
//Cria um painel para os campos do Sul
Container pCamposSul = new Container();
pCamposSul.setLayout(new GridLayout(2, 3));
//Configura e Acrescenta os Campos ao Painel Sul
lbNovoX = new JLabel();
lbNovoX.setText("Posição X: ");
tfNovoX = new JTextField();
lbNovoY = new JLabel();
lbNovoY.setText("Posição Y: ");
tfNovoY = new JTextField();
lbAngulo = new JLabel();
lbAngulo.setText("Ângulo: ");
tfAngulo = new JTextField();
pCamposSul.add(lbNovoX);
pCamposSul.add(lbNovoY);
pCamposSul.add(lbAngulo);
pCamposSul.add(tfNovoX);
pCamposSul.add(tfNovoX);
pCamposSul.add(tfAngulo);
//Posiciona o Painel de Campos Sul ao Sul do Frame
container.add(pCamposSul, BorderLayout.SOUTH);
//Cria um painel para Desenhos e posiciona no centro
JPanel pDesenho = new JPanel();
pDesenho.getGraphics();
container.add(pDesenho, BorderLayout.CENTER);
//Cria um painel para Campos ao Norte
Container pCamposNorte = new Container();
pCamposNorte.setLayout(new GridLayout(2, 3));
//Configura e Acrescenta os campos no Painel de Campos Norte
lbPosA = new JLabel();
lbPosA.setText("Posição atual do Ponto A: ");
tfPosA = new JTextField();
lbPosB = new JLabel();
lbPosB.setText("Posição atual Ponto B: ");
tfPosB = new JTextField();
lbPosC = new JLabel();
lbPosC.setText("Posição atual Ponto C: ");
tfPosC = new JTextField();
pCamposNorte.add(lbPosA);
pCamposNorte.add(lbPosB);
pCamposNorte.add(lbPosC);
pCamposNorte.add(tfPosA);
pCamposNorte.add(tfPosB);
pCamposNorte.add(tfPosC);
//Posiciona o Painel de Campos Norte ao Norte do Frame
container.add(pCamposNorte, BorderLayout.NORTH);
//Adiciona os Botões ao ActionListener
btSair.addActionListener(this);
btRotacao.addActionListener(this);
btLimpar.addActionListener(this);
btEscala.addActionListener(this);
//Ajustes do Frame Principal
setVisible(true);
//Desenha o triangulo
paint(pDesenho.getGraphics());
setSize(900, 700);
setResizable(false);
setLocationRelativeTo(null);
setTitle("Polígono");
pDesenho.repaint();
//Seta a posição atual dos pontos e "locka" os text fields
tfPosA.setText("(" + triangulo.getPontoA().getCoordX() + ", " + triangulo.getPontoA().getCoordY() + ")");
tfPosA.setEnabled(false);
tfPosB.setText("(" + triangulo.getPontoB().getCoordX() + ", " + triangulo.getPontoB().getCoordY() + ")");
tfPosB.setEnabled(false);
tfPosC.setText("(" + triangulo.getPontoC().getCoordX() + ", " + triangulo.getPontoC().getCoordY() + ")");
tfPosC.setEnabled(false);
}
public void paint(Graphics g){
g.drawString("A", triangulo.getPontoA().getCoordX() + AX, triangulo.getPontoA().getCoordY() + AY);
g.drawString("B", triangulo.getPontoB().getCoordX() + BX, triangulo.getPontoB().getCoordY() + BY);
g.drawString("C", triangulo.getPontoC().getCoordX() + CX, triangulo.getPontoC().getCoordY() + CY);
//Objeto graphics2D com o contexto gráfico atual
Graphics2D g2d = (Graphics2D) g.create();
int xPoints[] = {triangulo.getPontoA().getCoordX(), triangulo.getPontoB().getCoordX(),
triangulo.getPontoC().getCoordX()};
int yPoints[] = {triangulo.getPontoA().getCoordY(), triangulo.getPontoB().getCoordY(),
triangulo.getPontoC().getCoordY()};
g2d.setColor(Color.BLUE);
g2d.drawPolygon(xPoints, yPoints, 3);
g2d.dispose();
}
//Método actionPerformed da interface ActionListener
public void actionPerformed(ActionEvent evento){
if(evento.getSource() == btSair){
//Sai da "Aplicação"
this.dispose();
System.exit(0);
}else if(evento.getSource() == btLimpar){
//Retorna à configuração default do Triangulo
triangulo.setPontoA(new Ponto(250, 300));
triangulo.setPontoB(new Ponto(450, 300));
triangulo.setPontoC(new Ponto(350, 150));
//Desenha novamente
repaint();
}else if(evento.getSource() == btRotacao){
aplicarRotacao(Integer.parseInt(tfAngulo.getText()));
}
}
//Método responsável pela rotação do triângulo
public void aplicarRotacao(int angulo){
JOptionPane.showMessageDialog(null, "Rotação Aplicada!");
// TODO implentar aplicarRotacao()
}
public static void main(String args[]){
TelaPrincipal telaPrincipal = new TelaPrincipal();
telaPrincipal.setDefaultCloseOperation(EXIT_ON_CLOSE);
}
}
[img]http://img233.imageshack.us/img233/7237/screenshot087a.png[/img]
[img]http://img69.imageshack.us/img69/5554/screenshot088f.png[/img]
[img]http://img69.imageshack.us/img69/101/screenshot089.png[/img]

