Estou querendo que apareça dois pontos em meu frame mas somente aparece um dos pontos que seria o segundo ponto e na cor preta, mas deveria ser azul.
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JPanel;
public class Spawn extends JPanel{
public int x, y;
public Color cor = Color.blue;
public Spawn(int px, int py) {
x = px;
y = py;
}
public void paintComponent(Graphics g){
g.fillOval(x, y, 10, 10);
g.setColor(cor);
}
}
//Classe Principal
import java.awt.Color;
import java.awt.List;
import java.util.ArrayList;
import javax.swing.JFrame;
public class Mae {
public static void main(String[] args) {
Mae mae = new Mae();
mae.go();
}
JFrame frame = new JFrame();
ArrayList<Spawn> SpawnList = new ArrayList<Spawn>();
public void go(){
frame.setSize(500, 500);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// Preciso que apareça esses dois pontos
Spawn sp0 = new Spawn(10, 50);
Spawn sp1 = new Spawn(100, 20);
SpawnList.add(sp0);
SpawnList.add(sp1);
frame.getContentPane().add(SpawnList.get(0));
frame.getContentPane().add(SpawnList.get(1));
frame.repaint();
}
}
Está aparecendo apenas um dos pontos porque provavelmente o ultimo JPanel(Spawn) que vc adicionou ocupa toda a área do Frame, deveria utilizar um Layout Manager ao trabalhar com vários componentes.
O ponto esta saindo da cor preta porque vc esta definindo a cor depois de o ter desenhado.
Para ficar um pouco melhor, a sua classe Spawn não precisa ser um JPanel, ela simplesmente precisa conhecer como desenhar um “spawn” num objeto Graphics.
Poderia ter uma outra classe SpawnPanel que faz o trabalho pintar todos os “Spawn” que quiser, e esse SpawnPanel que deve ser adicionado no frame.
Ficaria algo mais ou menos assim:
import java.awt.Color;
import java.awt.Graphics;
public class Spawn{
public int x, y;
public Color cor = Color.blue;
public Spawn(int px, int py) {
x = px;
y = py;
}
/*
* Todas as regras para desenhar o Spaw
*/
public void paint(Graphics g){
g.setColor(cor);
g.fillOval(x, y, 10, 10);
}
}
import java.awt.Graphics;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JPanel;
public class SpawnPanel extends JPanel {
private List<Spawn> spawns = new ArrayList<Spawn>();
public void paintComponent(Graphics g) {
//desenha a lista de Spawn
for(Spawn spawn: getSpawns()){
spawn.paint(g);
}
}
public void addSpawn(Spawn spawn){
spawns.add(spawn);
}
public List<Spawn> getSpawns() {
return spawns;
}
public void setSpawns(List<Spawn> spawns) {
this.spawns = spawns;
}
}
import javax.swing.JFrame;
public class Mae {
public static void main(String[] args) {
Mae mae = new Mae();
mae.go();
}
JFrame frame = new JFrame();
SpawnPanel spawnPanel = new SpawnPanel();
public void go(){
frame.setSize(500, 500);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//Add todos os seus pontos
spawnPanel.addSpawn(new Spawn(10, 50));
spawnPanel.addSpawn(new Spawn(100, 20));
//add o spawnPanel
frame.getContentPane().add(spawnPanel);
frame.repaint();
}
}