rysowanie w panelu :)

0

witam....

Zrobiłem sobie coś takiego :

class Main extends JFrame {

    JButton but = new JButton("Click");
    int a = 1;
    JPanel panel = new Pan(a);

    public Main() {

        setLayout(new GridLayout(0, 1));
        add(panel);
        add(but);
        but.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                a++;               
                panel.revalidate();
                panel.repaint();
            }
        });
    }

    class Pan extends JPanel {

        int cnt;

        public Pan(int cnt) {
            this.cnt = cnt;
        }

        @Override
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            switch (cnt) {
                case 1:
                    g.setColor(Color.red);
                    g.drawLine(0, 0, 50, 50);
                    break;
                case 2:
                    g.setColor(Color.red);
                    g.drawLine(0, 0, 100, 50);
                    break;
                case 3:
                    g.setColor(Color.red);
                    g.drawLine(0, 0, 100, 100);
                    break;
                case 4:
                    g.setColor(Color.red);
                    g.drawLine(0, 0, 300, 300);
                    break;
            }          
        }
    }

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

            public void run() {
                JFrame fr = new Main();
                fr.setVisible(true);
                fr.setSize(500, 500);
                fr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            }
        });
    } // end main
}
 

i mi nie działa rysowanie....
Znaczy rysuje się po raz pierwszy a dalej już nie kce :/

0
            public void actionPerformed(ActionEvent e) {
                a++; //wtf?              
                //panel.revalidate(); niepotrzebne
                panel.repaint();
            }

Zamień zwiększanie pola a w klasie Main na zwiększanie pola cnt w klasie Pan.

0

ale jak zwiększać pole cnt w Pan przy użyciu tego Buttona?

przecież cnt jest w klasie pan więc nie mogę jej użyć w actionListener'ze.

0

Powiedz, że robisz sobie jaja.

            public void actionPerformed(ActionEvent e) {
                panel.zwieksz();
                panel.repaint();
            }
        .....
        public Pan(int cnt) {
            this.cnt = cnt;
        }
        public void zwieksz()
        {
            cnt++;
        }
0

chyba powinienem się pójść przewiertzyć albo coś like that ale ta metoda zwiększ nie zadziała przecież :/

jak ją umieszczę w klasie Pan to w listenerze z konstruktora nie mogę jej użyć , a poza tą klasą jej nie

umieszczę bo po prostu cnt mam tylko w Pan

1

Pomysł z przewietrzeniem brzmi rozsądnie. Uzupełnij go o walnięcie młotkiem w głowę.

0

I o poczytanie jakiegoś podręcznika do Javy.
Kto Ci powiedział, że "new ActionListener()" musi klasą anonimową w Main?

0

Wiem że nie musi tak być...Mogę zrobić normalną klasę naprzykład....Ale co w związku z tym?

1

Przecież napisałem co masz zrobić. Powtórzę, bo wygląda, że użycie młotka nie pomogło.

  1. Zmień definicję pola panel
Pan panel = new Pan(...);
  1. Zmień obsługę zdarzenia
   panel.zwieksz();
   panel.repaint();
  1. Dodaj do klasy Pan metodę zwiększ
  public void zwieksz()
  {
     cnt++;
  }

Możesz zostać przy starej definicji pola panel, ale wtedy musisz rzutować

  ((Pan)panel).zwieksz();
0

omg....

jak teraz wytłumaczyłeś łopatologicznie to już zaświeciło :/

faktycnie...podstawy podstaw...(aż mi trochę głupio się zrobiło)

Dzięki za pomoc :)

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