Pessoal, estou apanhando nesse negocio de Java, tenho um trabalho na faculdade que manda colocar dois botões, um insere e outro retira. O botão insere coloca retangulos coloridos um sobre o outro, no maximo 10… O botão retira tira os retangulos.
Vejam até onde cheguei e por favor me ajudem… Já estou no limite do prazo:
// Arquivo eventos
import java.awt.;
import java.awt.event.;
import javax.swing.*;
import java.awt.geom.Rectangle2D;
import java.applet.Applet;
public class eventos extends Applet
{
@Override
public void init(){
add(new Button("Inserir"));
add(new Button("Retirar"));
add(new Button("Sair"));
}
// Coloquei esse paint só para testar, coloco um tetangulo
// no Painel,
// @Override
// public void paint(Graphics g)
// {
// Graphics2D g2 = (Graphics2D) g;
// g2.draw(new Rectangle2D.Double(130, 130,130, 50));
// }
@Override
public boolean action(Event evento, Object quem) {
if(evento.target instanceof Button) {
String label = (String)quem;
if(label == "Inserir")
// Aqui chama o metodo para colocar o retangulo
repaint();
else if (label == "Retirar")
setBackground(Color.red); // Só para testar, faz ficar Vermelho
else if(label == "Sair")
System.exit(1);
else
return false;
repaint();
return true; // não chama mais nenhum action seguinte
}
else
return false; // evento não foi de botão. Próximo action é chamado.
}
}
//Arquivo Main
import java.awt.;
import java.awt.event.;
import java.applet.Applet;
import javax.swing.*;
public class Main
{
public static void main(String[] args)
{
JFrame janela = new JFrame("Eventos em Botões. ");
janela.setSize(700, 600);
Applet principal = new eventos();
principal.init();
principal.start();
janela.add(principal);
janela.setVisible(true);
}
}
Bom dia, ainda tentando… O problema esta que não consigo chamar o metodo para colocar figura no Frame quando o botão é acionado.
public boolean action(Event evento, Object quem)
{
if(evento.target instanceof Button)
{
String label = (String)quem;
if(label == “Inserir”)
// O que colocar aqui para colocar uma figura no Frame (Ex.: um retangulo)
- O codigo identado esta aqui:
http://paste.archlinux-br.org/583
Se puderem me ajudar…
Oi.
Você pode colocar código indentado no GUJ usado as tags code. Assim:
//Seu código aqui
Experimente fazer isso num post. Para mais informações sobre esse e outros recursos do fórum, leia esse tópico:
http://www.guj.com.br/posts/list/50115.java
Antes de tudo, sobrescreva JApplet, e não Applet.
- Crie um ArrayList<Rectangle2D>, que conterá todos os retângulos já inseridos;
- No botão de Inserir, crie um retângulo e coloque-o dentro do ArrayList. Chame repaint();
- No método paint do seu JApplet, pinte todos os retângulos que estão dentro do seu ArrayList;
- No botão de remover, remova o último retângulo do arrayList e chame novamente o repaint();
Interessante…
public class eventos extends Applet
{
public void init(){
add(new Button("Inserir"));
add(new Button("Retirar"));
add(new Button("Sair"));
}
public boolean action(Event evento, Object quem) {
if(evento.target instanceof Button) {
String label = (String)quem;
if(label == "Inserir")
// Como colocar um retangulo aqui?
repaint();
else if (label == "Retirar")
setBackground(Color.red); // Só para testar, faz ficar Vermelho
else if(label == "Sair")
System.exit(1);
else
return false;
repaint();
return true; // não chama mais nenhum action seguinte
}
else
return false; // evento não foi de botão. Próximo action é chamado.
}
}
Boa noite ViniGodoy,
Como disse, apesar de já ter programado em Clipper, esse negocio de ambiente gráfico ta me dando um porre. Paciência comigo...
- Mudei o ?extends Applet? por ?extends JApplet?, inclusive no Main e os botões simplesmente sumiram, não funcionou. Voltei ao que era.
- Criar um ArrayList. Pelo que pesquisei o ArrayList é como um container ou janela que armazenamos as figuras, mas a janela já existe com o JFrame no main…
- Essa é minha principal (apesar de ter outras) duvida, como criar um retângulo dentro do botão inserir?
Esse final de semana vou tentar comprar o livro do Deitel para ver se ajuda, mas de qualquer forma muito obrigado.
1 curtida
Eu não costumo a fazer isso, mas como muita gente por aqui tem dúvida com interface gráfica, decidi postar a solução do seu exercício. Recomendo fortemente que você a estude e talvez simplifique para o caso da sua aula. É bom lembrar que esse fórum é público e talvez o seu professor conheça ele tanto quanto você (meus alunos as vezes se esquecem disso):
[code]import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.geom.Rectangle2D;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import javax.swing.JApplet;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JPanel;
/**
-
Este applet é formado por um painel com os botões de adicionar e remover, e
-
um outro componente, que contém o código que efetivamente desenha os
-
retângulos.
*/
public class Retangulos extends JApplet {
private JButton btnAdicionar = null;
private JButton btnRemover = null;
private AreaRetangulos areaRetangulos = new AreaRetangulos();
public Retangulos() {
// Definimos nosso layout como o de borda
setLayout(new BorderLayout());
// Criamos um painel com os botões de adicionar e remover
JPanel painelBotoes = new JPanel(new FlowLayout());
painelBotoes.add(getBtnAdicionar());
painelBotoes.add(getBtnRemover());
// Adicionamos o painel dos botões no norte (topo)
add(painelBotoes, BorderLayout.NORTH);
// Agora, adicionamos o painel dos retângulos
add(areaRetangulos, BorderLayout.CENTER);
setSize(800, 800);
}
private JButton getBtnAdicionar() {
if (btnAdicionar != null)
return btnAdicionar;
btnAdicionar = new JButton("Adicionar");
btnAdicionar.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// Pedimos para o painel desenhador de retângulos para adicionar
// um novo retângulo
areaRetangulos.adicionar();
}
});
return btnAdicionar;
}
private JButton getBtnRemover() {
if (btnRemover != null)
return btnRemover;
btnRemover = new JButton("Remover");
btnRemover.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// Pedimos para o painel desenhador de retângulos para remover
// o último retângulo
areaRetangulos.remover();
}
});
return btnRemover;
}
}
/**
-
Este é o painel que efetivamente desenha os retângulos em si. Ele contém uma
-
lista dos retângulos que são desenhados. É nessa lista que você mexe.
*/
class AreaRetangulos extends JComponent {
private List<Rectangle2D> desenhados = new ArrayList<Rectangle2D>();
/**
-
Adiciona um único retângulo na lista de retângulos a serem desenhados.
-
Esse retângulo terá tamanho e posição aleatórias.
*/
public void adicionar() {
// Calculamos a posição de modo a não ultrapassar o limite do
// componente.
int h = getHeight() / 2;
int w = getWidth() / 2;
// Criamos um retângulo
Random r = new Random();
Rectangle2D rect = new Rectangle2D.Float(r.nextInt(w), r.nextInt(h), r
.nextInt(w), r.nextInt(h));
// Adicionamos ele na lista que será desenhada
desenhados.add(rect);
// Pedimos para o applet se redesenhar, já que existe um novo
// retângulo
repaint();
}
/**
-
Remove o último retângulo da lista. Ele foi também o último retângulo a
-
ser desenhado.
*/
public void remover() {
// Removemos o último elemento desenhado
// O método remove aceita um índice que vai de 0 (primeiro elemento) até
// size()-1 (último elemento).
desenhados.remove(desenhados.size() - 1);
// Pedimos para o applet se redesenhar, já que um retângulo foi
// removido
repaint();
}
/**
-
O método a ser sobrescrito num JComponent é o paintcomponent, não o
-
paint. O paint você só sobrescreve nas classes JFrame, JDialog, JApplet e
-
JInternalPane. Para redesenhar o componente, simplesmente apagamos todo o
-
seu conteúdo e desenhamos todos os retângulos que estão na lista de novo.
-
-
Esse método é chamado automaticamente, sempre que o repaint() é invocado.
*/
@Override
protected void paintComponent(Graphics g) {
// Não podemos alterar o contexto gráfico g recebido
// no parâmetro. Por isso, tiraremos uma cópia dele.
Graphics2D g2d = (Graphics2D) g.create();
// Limpamos toda a área de applet
g2d.clearRect(0, 0, getWidth(), getHeight());
// Desenhamos todos os retângulos
for (Rectangle2D rect : desenhados)
g2d.draw(rect);
// Após desenhar, apagamos a cópia do ambiente gráfico
g2d.dispose();
}
}[/code]
Neste exemplo os retângulos não estão preenchidos e nem são coloridos. Deixo esse “upgrade” para você.
Olá ViniGodoy,
É até bom meu professor conhecer esse fórum, assim vai saber que estou indo atrás de entender o conteúdo. Não vou mandar seu código completo, mas estudar linha a linha e tentar entender o negocio.
Estou fazendo na UFSCAR, curso EAD de Sistema de Informação. Esse semestre a mesma matéria foi mesclada com C++ e Java, mas o que enroscou mesmo foi a Interface Gráfica.
Me falaram que EAD era fácil, mas o pessoal da UFSCAR esta puxando muito, de 50 alunos hoje somos em torno de 10.
Muito obrigado pela força.