wyswietlenie kawadratu po zmianie okna

Odpowiedz Nowy wątek
2011-08-27 20:19
okno
0

Witam,
mam problem z wyświetleniem kwadratu, który ma zmieniać swoją pozycję. Normalnie nie ma z tym problemu, ale ja chciałbym, żeby to wszystko było wyświetlane kiedy nacisnę przycisk "Nowa gra". Oto kod:

 import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.Toolkit;
import java.util.Timer;
import java.util.TimerTask;
import java.util.*;
import java.awt.*;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.*;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.*;

public class panele extends JFrame {
    int x = 0, y = 0;

    JPanel basic = new JPanel();
    JPanel panelmenu = new JPanel();
    JPanel panelprzyciskow = new JPanel();
    JPanel paneldrugi = new JPanel();

    JButton nowagra = new JButton("Nowa Gra");

    boolean ch = false;
    boolean ach = false;
    boolean bch = false;
    boolean cch = false;

    public panele() {
        super("window"); 

        setLayout(new BorderLayout());
        basic.setLayout(new BorderLayout());
        add(basic);   
        basic.setBackground(Color.black);
        panelmenu.setBackground(Color.red);
        panelprzyciskow.setBackground(Color.blue);
        paneldrugi.setBackground(Color.yellow);

        basic.add("Center", panelmenu);
        basic.add("East",panelprzyciskow);
        panelprzyciskow.add(nowagra);

        nowagra.addActionListener(new nowagra());
    }

    class xxx implements ActionListener {

        public void actionPerformed(ActionEvent e) {
            if (!ach)
            {
                basic.removeAll();
                basic.revalidate();
                repaint();
            } else {
                basic.removeAll();
                basic.add(paneldrugi);
                basic.revalidate();
                repaint();
            }
            ach = !ach;
    }
    }
    class nowagra implements ActionListener {

        public void actionPerformed(ActionEvent e) {
            if (!bch)
            {
                basic.removeAll();
                basic.add(paneldrugi);
                basic.revalidate();
                repaint();
            } else {
                basic.removeAll();
                basic.add(panelmenu);
                basic.revalidate();
                repaint();
            }
            bch = !bch;

    }
    }
    class gra extends JPanel implements KeyListener 
    {
        public void paint (Graphics o)
        {

            o.setColor(Color.green);
            o.fillRect(x,y,50,50);

        }
        public void keyTyped(KeyEvent e){

        }
        public void keyReleased(KeyEvent e){

        }

        public void keyPressed(KeyEvent e){

                int keyCode = e.getKeyCode();

                if (keyCode == KeyEvent.VK_D)
                {
                    x = x + 50;             

                }
                this.repaint();

        }
    }
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {

            public void run() {
                JFrame fr = new panele();
                fr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                fr.setSize(200, 200);
                fr.setVisible(true);
                fr.setResizable(true);
            }
        });
    }
}

Póki co nie jest to ni jak połączone ze sobą (okno główne z klasą gra). Próbowałem łączyć to na wiele sposobów, ale to tylko zaśmiecało kod. Może mi ktoś wyjaśnić jak to zrobić, żeby zaczęło działać?
Z góry dzięki.

Pozostało 580 znaków

2011-08-30 02:13
0
 
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.Color;
import java.awt.geom.*;
 
public class Gra
{
    public static void main(String[] args)
    {
        RamkaGry ramka = new RamkaGry();
        ramka.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 
        ramka.setVisible(true);
    }
}
 
class RamkaGry extends JFrame
{
    public RamkaGry()
    {
        setTitle("Gra");
        setSize(256,256);
        setResizable(false);
 
        PanelGry panel = new PanelGry();
        Container zawartosc = getContentPane();
        zawartosc.add(panel);
    }
}
 
class PanelGry extends JPanel
{
    public PanelGry()
    {
        przyciskGra = new JButton("Nowa Gra");
 
        przyciskGra.addActionListener(new
            ActionListener()
            {
                public void actionPerformed(ActionEvent e)
                {
 
                    pozycja = new Point2D.Double(szerMapy/2,wysMapy/2);
 
                    przyciskGra.setEnabled(false);
                    repaint();
                    przyciskGra.setEnabled(true);
 
                }
            });
        setBackground(Color.red);   
        add(przyciskGra);
        TestKlawisza tk = new TestKlawisza();
        addKeyListener(tk);
 
    }
 
    public boolean isFocusTraversable(){return true;}
 
    public void paintComponent(Graphics g)
    {
        super.paintComponent(g);
        Graphics2D g2 = (Graphics2D)g;
        rysuj(g2);
    }
 
    public void rysuj(Graphics2D g2)
    {
        //tlo gry
        g2.setColor(Color.black);
        Rectangle2D rt = new Rectangle2D.Double(0,wysMenu,szerMapy,wysMapy);
        g2.draw(rt);
        g2.fill(rt);
        g2.setColor(Color.green);
        Rectangle2D kwadracik = new Rectangle2D.Double(pozycja.getX(),pozycja.getY(),bokKwadracika,bokKwadracika);
        g2.draw(kwadracik);
        g2.fill(kwadracik);
    }
 
    private class TestKlawisza implements KeyListener
    {
        public void keyPressed(KeyEvent e)
        {
            int kod = e.getKeyCode();
 
            if(kod==KeyEvent.VK_UP)
                {
                    if(pozycja.getY()>wysMenu)
                    pozycja = new Point2D.Double(pozycja.getX(),pozycja.getY()-0.5);
                }
            else if(kod==KeyEvent.VK_DOWN)
                {
                    if(pozycja.getY()<wysMapy-bokKwadracika)
                    pozycja = new Point2D.Double(pozycja.getX(),pozycja.getY()+0.5);
                }
            if(kod==KeyEvent.VK_LEFT)
                {
                    if(pozycja.getX()>0)
                    pozycja = new Point2D.Double(pozycja.getX()-0.5,pozycja.getY());
                }
            if(kod==KeyEvent.VK_RIGHT)
                {
                    if(pozycja.getX()<szerMapy-bokKwadracika)
                    pozycja = new Point2D.Double(pozycja.getX()+0.5,pozycja.getY());
                }
 
            repaint();
        }
 
        public void keyReleased(KeyEvent e){}
 
        public void keyTyped(KeyEvent e){}
    }
 
    private int wysMenu = 32;
    private int bokKwadracika = 8;
    private int szerMapy = 256;
    private int wysMapy = 256-wysMenu;
    private Point2D pozycja = new Point2D.Double(szerMapy/2,wysMapy/2);
    private JButton przyciskGra;
}

To mniej wiecej dzialajacy programik tak jak chcesz, kwadrat się porusza po nacisnięciu przycisku "Nowa Gra".
Kiedyś miałem z tym problem ale wyl/wl przycisku pomaga.

przyciskGra.setEnabled(false);
repaint();
przyciskGra.setEnabled(true);


Każdy programista przybywający z innego miasta jest fachowcem.

Pozostało 580 znaków

2011-09-01 13:00
okno
0

Dzięki za chęci, ale nie o to mi chodziło. Potrafię stworzyć ruch jakiegoś obiektu na jednym panelu, podobnie jak w twoim kodzie. Mi chodzi o to, żeby były 2 panele, czerwony na którym znajduje się przycisk gry i nic więcej oraz żółty na którym będzie znajdował się kwadrat, którym będzie można ruszać. Klikając w przycisk "start" czerwony panel zostaje usunięty i zastąpiony całkowicie żółtym. (żółty panel jest niewidoczny do czasu kliknięcia przycisku "start") Męczę się już z tym bardzo długo, a jest mi to potrzebne do stworzenia menu wyboru w grze, czy chce się grać takim czy takim kolorem. W żadnej książce nie znalazłem rozwiązania tego problemu. Za 3 dni znowu będę próbował podejść do tego.

Pozostało 580 znaków

2011-09-01 13:07
0

Malo elegancki sposób ale łatwy i działający to np. poprzez referencje.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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