Jump to content
Guna

[Resolvido] ajuda em ambiente grafico

Recommended Posts

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

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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 ?

Share this post


Link to post
Share on other 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);

Edited by HappyHippyHippo

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

Share this post


Link to post
Share on other 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();

		 }
	 }
 }
}

Share this post


Link to post
Share on other 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)

Share this post


Link to post
Share on other 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 ?

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.