Obraz nie pojawia się od razu po wciśnięciu przycisku.

2014-10-10 18:21
0

Piszę taki program w którym są jakieś miasta na mapie a za pomocą przycisków tworzą się postacie, które później będą się poruszały po tej mapie pomiędzy miastami. Napisałam już klasę z panelem w którym ustawiłam miasta i zrobiłam klasę z przyciskiem który dodaje obrazek na mapie ( na razie jakiś tam byle się pokazywał) i ogólnie wszystko działa, miasta są na mapie od razu, poza tym, że obrazek od przycisku nie pojawia się od razu na mapie tylko muszę zmniejszyć rozmiar okna i dopiero wtedy się pojawia. Próbowałam już różnych sposobów z ustawianiem setVisible w różnych miejscach ale nic nie pomogło. Nie chce za bardzo ustawiać jakiegoś Layouta, bo te obrazki nie mogą być tak sztywno ustawione gdzieś. Tutaj jest mój kod:

Klasa z ramką:

package superworld;

import java.awt.*;
import javax.swing.*;
public class SuperWorld {

    public static void main(String[] args) {

        JFrame frame= new JFrame();  
       frame.setSize(1050,650);
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       frame.setContentPane(new SuperPanel(frame));
       frame.pack();
       frame.setVisible(true);
       frame.setLayout(null);

    //   frame.setResizable(false);
    }

} 

Klasa z Panelem:

package superworld;

import javax.swing.*;
import java.awt.*;
import java.util.*;
import java.awt.event.*;
import javax.swing.Timer;

public class SuperPanel extends JPanel implements ActionListener{

        JFrame frame;
        Timer mainTimer;
    public static final int HEIGHT = 550;
    public static final int WIDTH = 1050;
        int i;
        int w=-100;
        int h=-50;
        ArrayList<SuperMiasto> miasta = new ArrayList<SuperMiasto>();

   private JButton heroButton;
   private JButton cywilButton;

    public SuperPanel(JFrame frame) {
        mainTimer = new Timer(10,this);
               heroButton = new HeroButton(this);
               cywilButton = new CywilButton(this);
        setLayout(null);
        setPreferredSize(new Dimension(WIDTH, HEIGHT));
        setBackground(Color.GREEN);                           
                for(i=0;i<10;i++)
                {
                    miasta.add( new SuperMiasto() );
                    miasta.get(i).x=w;
                    miasta.get(i).y=h;
                    miasta.get(i).imagelabel = new JLabel(miasta.get(i).image);
                    miasta.get(i).imagelabel.setBounds(miasta.get(i).x,miasta.get(i).y,miasta.get(i).image.getIconWidth(),miasta.get(i).image.getIconHeight());
                    add(miasta.get(i).imagelabel);
                    w=w+200;
                    if (w > WIDTH-200)
                    {
                        h=h+200;
                        w=-100;
                    }
                }

    }
        @Override
      public void paintComponent(Graphics g){
        super.paintComponent(g);
        Graphics2D g2d = (Graphics2D) g;
           add(heroButton); 
           add(cywilButton); 
           frame.setVisible(true);

    }   
      public void actionPerformed(ActionEvent e) {
            repaint();            
    }
} 

A tutaj przycisk:

package superworld;

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

class HeroButton extends JButton implements ActionListener {

    private JPanel buttonPanel;

    HeroButton(JPanel buttonPanel) {
        super("Dodaj hero");
        this.buttonPanel = buttonPanel;
                setBounds(0,500,150,50);
        addActionListener(this);              
    }

    @Override
    public void actionPerformed(ActionEvent e) {
            SuperLudzie batman = new SuperLudzie();
            batman.imagelabel = new JLabel(batman.image);
            batman.imagelabel.setBounds(50,50,batman.image.getIconWidth(),batman.image.getIconHeight());
        buttonPanel.add(batman.imagelabel);
                buttonPanel.setVisible(true);

    }
} 
edytowany 2x, ostatnio: bogdans, 2014-10-12 08:12
!Wstawiaj kod w znaczniki &lt;code=java&gt; &lt;/code&gt; - bogdans 2014-10-12 08:13

Pozostało 580 znaków

2014-10-10 19:17

Musisz zrobić repaint panelu do którego dodano button.


Masz problem? Pisz na forum, nie do mnie. Nie masz problemów? Kup komputer...

Pozostało 580 znaków

2014-10-10 20:14
0

Zadziałało, stokrotnie ci dziękuje.

Pozostało 580 znaków

Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0