Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Guna

[Resolvido] ajuda em ambiente grafico

Mensagens Recomendadas

Guna

boas tardes carissimos

tenho de desenvolver um projecto com recurso a um ambiente grafico, mas nunca o utilizei ... daí o meu pedido de ajuda

o que pretendo fazer, é ter uma janela com uma imagem de fundo, e sobre essa imagem desenhar alguns elementos, nomeadamente semicirculos e algumas setas ...

gostaria que me indicassem por onde começar, visto que ainda sou iniciante nisto e so sei fazer janelas com butoes e textboxes xD

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
eatg75

Este site aqui http://zetcode.com/ pelo menos 4 grupos de tutoriais para programacao de GUI em Java utilizando 4 toolkits diferentes, e ha tambem tutorial sobre java2d. Se so pretenderes criar GUI recomendo o QtJambi (binding Java para o Qt) ou Swing.


Victarion seized the dusky woman by the wrist and pulled her to him.

Victarion - She will do it. Go pray to your red god. Light your fire, and tell me what you see.

Moqorro's dark eyes seemed to shine.

Moqorro - I see dragons.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Guna

desde ja agradeço a tentativa de ajuda, mas ainda tenho alguns problemas ...

em primeiro lugar, nao estou a conseguir carregar uma imagem para defenir como background, pelo que vejo, sera complicado ir por esse caminho.

o que queria saber, é se da para usar o g.drawArc em cima de uma imagem carregada anteriormente sem alterar essa mesma imagem (desenhando apenas o arco por cima da imagem e nada mais), assim como se seria possivel defenir a area onde o arco poderia ser desenhado

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

desde ja agradeço a tentativa de ajuda, mas ainda tenho alguns problemas ...

em primeiro lugar, nao estou a conseguir carregar uma imagem para defenir como background, pelo que vejo, sera complicado ir por esse caminho.

o que queria saber, é se da para usar o g.drawArc em cima de uma imagem carregada anteriormente sem alterar essa mesma imagem (desenhando apenas o arco por cima da imagem e nada mais), assim como se seria possivel defenir a area onde o arco poderia ser desenhado

se queres alterar uma imagem, cria uma cópia

se estiveres a desenhar directamente na janela, desenha a imagem e depois o arco


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Guna

ja me tou a passar com o drawArc ... nao ha nada melhor do k isto ?

preciso de fixar um ponto onde começa a ser desenhado o arco, e o raio da curvatura do arco ... sendo que esse raio ira alterar conforme os dados inseridos pelo utilizador. o problema é que se mexo nas coordenadas da altura / comprimento, o fdp n assume as coordenadas do ponto inicial !

alguem me ajuda ?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Guna

de uma forma mais simples ... eu quero desenhar uma curva entre os pontos (x,y) e (x + (r*2) , y) onde r é o raio de curvatura, com altura igual a r*2. o valor de r é o unico que altera ... como faço isso de modo a depois desenhar essa curva em cima da imagem de fundo ?

http://img818.imageshack.us/img818/527/applettemp.jpg

algo semelhante a essa imagem ;)

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

http://docs.oracle.com/javase/7/docs/api/java/awt/Graphics.html#drawArc(int, int, int, int, int, int)

|
|(x,y)
|  X-----|-----X
|  |  -- | --  |
|  | /   |   \ |
|  |/    |    \| (x+2*r, y+r)
+--------X-----X----
  |\(x+r,y+r)/|
  | \   |   / |
  |  -- | --  |
  +-----|-----X (x+width, y+height)

se tens o ponto inicial (x,y) inicial e queres terminar no ponto (x + 2*r, y)

tens de definir um rectângulo com o ponto superior esquerdo (x, y - r) e o ponto do canto inferior direito (x + 2*r, y + r)

depois é definir que começas no ângulo 0 e tens um ângulo interno de 180 graus

// print to top of the arc that start at (x,y) and ends at (x + 2*r, y)
graphics.drawArc(x,
                y - r,
                x + 2*r,
                y + r,
                0,
                180);

Editado por HappyHippyHippo

IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Guna

por acaso ja consegui ir por um caminho mais simples :)

mas estranhamente nao me esta a abrir a janela do grafico :S

vou deixar aqui o codigo completo para ver se me ajudam

package Fclass;
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.QuadCurve2D;
import javax.swing.*;
public class FmGUI extends JFrame {
private JTextField txtQ,txtV,txtB,txtFm,txtTetta;
private JButton btCalcular, btLimpar, btSair,btDemonstrar;
private int r = 0;


public int getR() {
 return r;
}
public void setR(int r) {
 this.r = r;
}



public FmGUI() {
 super("Fisica 2012 - Campo Magnetico");



 JPanel p1 = new JPanel(new GridLayout(5,1));
 JPanel linha1 = new JPanel(new FlowLayout(FlowLayout.LEFT));
 p1.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
 JLabel lbl1 = new JLabel("Carga da Particula:		 ");
 txtQ = new JTextField(10);
 JLabel lbl11 = new JLabel(" x 10^(-19) C");
 linha1.add(lbl1);
 linha1.add(txtQ);
 linha1.add(lbl11);
 p1.add(linha1);
 JPanel linha2 = new JPanel(new FlowLayout(FlowLayout.LEFT));
 JLabel lbl2 = new JLabel("Velocidade da Particula:");
 txtV = new JTextField(10);
 JLabel lbl21 = new JLabel("m/s");
 linha2.add(lbl2);
 linha2.add(txtV);
 linha2.add(lbl21);
 p1.add(linha2);
 JPanel linha3 = new JPanel(new FlowLayout(FlowLayout.LEFT));
 JLabel lbl3 = new JLabel("Campo Magnetico:		 ");
 txtB = new JTextField(10);
 JLabel lbl31 = new JLabel("T");
 linha3.add(lbl3);
 linha3.add(txtB);
 linha3.add(lbl31);
 p1.add(linha3);
 JPanel linha5 = new JPanel(new FlowLayout(FlowLayout.LEFT));
 JLabel lbl5 = new JLabel("r = m * v / q * B : ");
 txtTetta = new JTextField(20);
 JLabel lbl51 = new JLabel("m");
 linha5.add(lbl5);
 linha5.add(txtTetta);
 txtTetta.setEditable(false);
 linha5.add(lbl51);
 p1.add(linha5);
 JPanel linha4 = new JPanel(new FlowLayout(FlowLayout.LEFT));
 JLabel lbl4 = new JLabel("Fm = q * v * B :	 ");
 linha4.add(lbl4);
 txtFm = new JTextField(20);
 txtFm.setEditable(false);
 JLabel lbl41 = new JLabel("N");
 linha4.add(txtFm);
 linha4.add(lbl41);
 p1.add(linha4);
 add(p1, BorderLayout.CENTER);

 TrataEventos t = new TrataEventos();
 JPanel p3 = new JPanel();
 p3.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
 btCalcular = new JButton("Calcular");
 btCalcular.setToolTipText("Efectua o calculo da Força no Campo Magnetico");
 btCalcular.setMnemonic('C');
 btCalcular.addActionListener(t);
 p3.add(btCalcular);
 btLimpar = new JButton("Limpar");
 btLimpar.setToolTipText("Limpa contéudo caixas de texto");
 btLimpar.setMnemonic('L');
 btLimpar.addActionListener(t);
 p3.add(btLimpar);

 btDemonstrar = new JButton("Demonstrar");
 btDemonstrar.setToolTipText("Efectua o Demoonstração da Força no Campo Magnetico");
 btDemonstrar.setMnemonic('D');
 btDemonstrar.addActionListener(t);
 p3.add(btDemonstrar);

 btSair = new JButton("Sair");
 btSair.setToolTipText("Fecha programa");
 btSair.setMnemonic('S');
 btSair.addActionListener(t);
 p3.add(btSair);
 add(p3, BorderLayout.SOUTH);



 getRootPane().setDefaultButton(btCalcular);
 setDefaultCloseOperation(EXIT_ON_CLOSE);
 setSize(600, 400);
//	 pack();
 setMinimumSize(new Dimension(getWidth(), getHeight()));
 setLocationRelativeTo(null);
//	 setLocation(200, 200);
 setVisible(true);
}
public class Grafico extends Applet
{
private Image img;
@Override
public void init()
{
 img = null;
}
public void loadImage()
{
 try
 {
	 img = getImage(getDocumentBase(), "image002.gif");
 }
 catch(Exception e) { }
}
@Override
public void paint(Graphics g)
{

 int r = (int) getR() * 100;

 int x1=198;
 int y1=245;

 int x2=x1+(100+r);
 int y2=y1;

 int p1=x1 + (int) (x2-x1)/2;
 int p2=y1-(100+r);

 Graphics2D g2 = (Graphics2D) g;
 setSize(400, 400);
 setVisible(true);
 if (img == null)
	 loadImage();
 g.drawImage(img, 0, 0, this);
 g.setColor(Color.RED);
 // create new QuadCurve2D.Float
 QuadCurve2D q = new QuadCurve2D.Float();
 // draw QuadCurve2D.Float with set coordinates
 q.setCurve(x1, y1, p1, p2, x2, y2);
 g2.draw(q);

}
}
private class TrataEventos implements ActionListener {
 public void actionPerformed(ActionEvent e) {
	 Object botao = e.getSource();
	 if (botao == btSair) {
		 System.exit(0);
	 } else if (botao == btLimpar) {
		 txtQ.setText("");
		 txtV.setText("");
		 txtB.setText("");
		 txtFm.setText("");
		 txtQ.requestFocus();
	 } else if (botao == btCalcular) {

			 double fm = (Float.parseFloat(txtQ.getText()) * Math.pow(10, -19)) * Float.parseFloat(txtV.getText()) * Float.parseFloat(txtB.getText());
			 double raio = ((9.1 * Math.pow(10, -31)) * Float.parseFloat(txtV.getText())) / ((Float.parseFloat(txtQ.getText()) * Math.pow(10, -19)) * Float.parseFloat(txtB.getText()));
			 txtFm.setText(String.valueOf(fm));
			 txtTetta.setText(String.valueOf(raio));

	 }else if (botao==btDemonstrar){

		 double raio = ((9.1 * Math.pow(10, -31)) * Float.parseFloat(txtV.getText())) / ((Float.parseFloat(txtQ.getText()) * Math.pow(10, -19)) * Float.parseFloat(txtB.getText()));	
		 setR((int) (raio * 10));
		 Grafico g = new Grafico();

		 }
	 }
 }
}

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Guna

para o resultado que pretendo, penso k é mais simples para a manipulaçao de resultados :)

so n percebo pk o actionlistener n abre a janela do grafico :S (deve ser um erro de principiante, dakeles msm obvios xD)

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Guna

bem, problema resolvido xD meti o grafico no BorderLayout.EAST, assim n preciso de abrir uma nova janela xD

agora tenho uma duvida ...

eu tenho um valor numa classe, e pretendo ir buscar esse valor apartir de outra classe ... ja criei o set e o get na primeira, mas n consigo ir buscalo na segunda ... tenho de fazer um interface entre as duas, ou é so um problema com o cast da funçao ?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.