Guna Posted January 4, 2013 at 05:03 PM Report #489551 Posted January 4, 2013 at 05:03 PM 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
HappyHippyHippo Posted January 4, 2013 at 05:09 PM Report #489554 Posted January 4, 2013 at 05:09 PM http://docs.oracle.com/javase/tutorial/2d/basic2d/index.html IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
eatg75 Posted January 5, 2013 at 01:15 AM Report #489695 Posted January 5, 2013 at 01:15 AM 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.
AJBM Posted January 5, 2013 at 11:34 AM Report #489712 Posted January 5, 2013 at 11:34 AM Boas! http://www.lac.inpe.br/~rafael.santos/Docs/SEMAC-UNESP/2009/apgraf.pdf
Guna Posted January 7, 2013 at 07:09 PM Author Report #490037 Posted January 7, 2013 at 07:09 PM 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
HappyHippyHippo Posted January 7, 2013 at 07:10 PM Report #490038 Posted January 7, 2013 at 07:10 PM 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 Portugol Plus
Guna Posted January 9, 2013 at 06:37 PM Author Report #490416 Posted January 9, 2013 at 06:37 PM 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 ?
Guna Posted January 9, 2013 at 08:03 PM Author Report #490431 Posted January 9, 2013 at 08:03 PM 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 😉
HappyHippyHippo Posted January 9, 2013 at 09:59 PM Report #490456 Posted January 9, 2013 at 09:59 PM (edited) 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 January 9, 2013 at 10:00 PM by HappyHippyHippo IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Guna Posted January 10, 2013 at 12:00 AM Author Report #490483 Posted January 10, 2013 at 12:00 AM 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(); } } } }
HappyHippyHippo Posted January 10, 2013 at 12:53 AM Report #490486 Posted January 10, 2013 at 12:53 AM isso é mais simples que a chamada de uma única função ??? IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Guna Posted January 10, 2013 at 12:03 PM Author Report #490569 Posted January 10, 2013 at 12:03 PM 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)
Guna Posted January 10, 2013 at 04:47 PM Author Report #490600 Posted January 10, 2013 at 04:47 PM 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 ?
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now