Hey,
ik ziet hier met een klein graphics probleem. Elke keer als ik een persoon (een rood stipje )wil toevoegen aan mijn panel, dan verschijnt er eerst iets anders, en dan pas het rode stipje (dus het flikkert eerst). Ik denk dat het iets te maken heeft met repaint, maar ik heb al zo veel geprobeerd , dat ik er niet meer aan uit kan.
Iemand enig idee wat het probleem zou zijn?
Thx
import java.awt.*;
import javax.swing.*;
public class Gui extends JFrame{
public JPanel panel;
int x,y;
Bord spelBord;
public Gui()
{
panel= new JPanel(){
public void paintComponent(Graphics g)
{
super.paintComponent(g);
ImageIcon icon = new ImageIcon("Afbeeldingen/toren.gif");
g.drawImage(icon.getImage(),0,0,1000,1000,null);
}
};
GridBagLayout gbl = new GridBagLayout();
panel.setLayout(gbl);
GridBagConstraints c = new GridBagConstraints();
c.gridx = 0;
c.gridy=0;
c.fill = GridBagConstraints.BOTH;
c.gridwidth = GridBagConstraints.REMAINDER;
JFrame bord;
spelBord = null;
spelBord = Bord.instance();
bord = spelBord.getSpelBord();
panel.add(bord.getContentPane(),c);
setContentPane(panel);
}
public static void main(String[] args)
{
Gui frame = new Gui();
frame.setDefaultCloseOperation( EXIT_ON_CLOSE );
frame.setSize(1000,1000);
frame.setVisible(true);
long time = java.util.Calendar.getInstance().getTimeInMillis();
while((java.util.Calendar.getInstance().getTimeInMillis() - time) < 3000) {
}
frame.spelBord.getLabelAt(1,0).addPerson();
frame.repaint();
}
}
public class Bord extends JFrame {
//Het speelveld
public static final int BREEDTE = 24;
public static final int HOOGTE = 15;
private JFrame gameBord = new JFrame();
private Labeltje[][] label;
private static Bord _instance = null;
public static Bord instance() {
if(_instance == null)
_instance = new Bord();
return _instance;
}
public static void deleteInstance() {
_instance = null;
}
private Bord() {
this(HOOGTE, BREEDTE);
}
private Bord(int ymax, int xmax) {
placeComponents(ymax, xmax, getSpelBord().getContentPane());
}
/**
* De componenten in de meegegeven container plaatsen
*/
private void placeComponents(int ymax, int xmax, Container frame) {
frame.setLayout(new GridLayout(ymax, xmax));
frame.setBackground(new Color(0,0,0,0));
label = new Labeltje[ymax][xmax];
for(int y = 0; y < ymax; y++) {
for(int x = 0; x < xmax; x++) {
Labeltje label_ = new Labeltje();
if(x %2 !=0 || y%2 !=1){
label_.setIcon(new ImageIcon("Afbeeldingen/steen.gif"));
}
label[y][x] = label_;
frame.add(label[y][x]);
}
}
}
public JFrame getSpelBord() {return gameBord;}
public Labeltje[][] getLabel() {return label;}
public Labeltje getLabelAt(int y, int x) {return label[y][x];}
}
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JLabel;
public class Labeltje extends JLabel{
public Labeltje(){}
boolean person_present=false;
public void addPerson(){
person_present = true;
this.repaint();
}
public void paintComponent(Graphics g){
super.paintComponent(g);
if(this.person_present){
g.setColor(Color.red);
g.fillOval(5,5,5,5);
this.setVisible(true);
}
}
}
ik ziet hier met een klein graphics probleem. Elke keer als ik een persoon (een rood stipje )wil toevoegen aan mijn panel, dan verschijnt er eerst iets anders, en dan pas het rode stipje (dus het flikkert eerst). Ik denk dat het iets te maken heeft met repaint, maar ik heb al zo veel geprobeerd , dat ik er niet meer aan uit kan.
Iemand enig idee wat het probleem zou zijn?
Thx
import java.awt.*;
import javax.swing.*;
public class Gui extends JFrame{
public JPanel panel;
int x,y;
Bord spelBord;
public Gui()
{
panel= new JPanel(){
public void paintComponent(Graphics g)
{
super.paintComponent(g);
ImageIcon icon = new ImageIcon("Afbeeldingen/toren.gif");
g.drawImage(icon.getImage(),0,0,1000,1000,null);
}
};
GridBagLayout gbl = new GridBagLayout();
panel.setLayout(gbl);
GridBagConstraints c = new GridBagConstraints();
c.gridx = 0;
c.gridy=0;
c.fill = GridBagConstraints.BOTH;
c.gridwidth = GridBagConstraints.REMAINDER;
JFrame bord;
spelBord = null;
spelBord = Bord.instance();
bord = spelBord.getSpelBord();
panel.add(bord.getContentPane(),c);
setContentPane(panel);
}
public static void main(String[] args)
{
Gui frame = new Gui();
frame.setDefaultCloseOperation( EXIT_ON_CLOSE );
frame.setSize(1000,1000);
frame.setVisible(true);
long time = java.util.Calendar.getInstance().getTimeInMillis();
while((java.util.Calendar.getInstance().getTimeInMillis() - time) < 3000) {
}
frame.spelBord.getLabelAt(1,0).addPerson();
frame.repaint();
}
}
public class Bord extends JFrame {
//Het speelveld
public static final int BREEDTE = 24;
public static final int HOOGTE = 15;
private JFrame gameBord = new JFrame();
private Labeltje[][] label;
private static Bord _instance = null;
public static Bord instance() {
if(_instance == null)
_instance = new Bord();
return _instance;
}
public static void deleteInstance() {
_instance = null;
}
private Bord() {
this(HOOGTE, BREEDTE);
}
private Bord(int ymax, int xmax) {
placeComponents(ymax, xmax, getSpelBord().getContentPane());
}
/**
* De componenten in de meegegeven container plaatsen
*/
private void placeComponents(int ymax, int xmax, Container frame) {
frame.setLayout(new GridLayout(ymax, xmax));
frame.setBackground(new Color(0,0,0,0));
label = new Labeltje[ymax][xmax];
for(int y = 0; y < ymax; y++) {
for(int x = 0; x < xmax; x++) {
Labeltje label_ = new Labeltje();
if(x %2 !=0 || y%2 !=1){
label_.setIcon(new ImageIcon("Afbeeldingen/steen.gif"));
}
label[y][x] = label_;
frame.add(label[y][x]);
}
}
}
public JFrame getSpelBord() {return gameBord;}
public Labeltje[][] getLabel() {return label;}
public Labeltje getLabelAt(int y, int x) {return label[y][x];}
}
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JLabel;
public class Labeltje extends JLabel{
public Labeltje(){}
boolean person_present=false;
public void addPerson(){
person_present = true;
this.repaint();
}
public void paintComponent(Graphics g){
super.paintComponent(g);
if(this.person_present){
g.setColor(Color.red);
g.fillOval(5,5,5,5);
this.setVisible(true);
}
}
}