Wątek przeniesiony 2014-05-12 13:00 z Java przez ŁF.

Wywoływanie funkcji w metodzie

0

Witam,
Tworzę własną kontrolkę buttona i niezbyt wiem jak mam wywołać jakąś funkcję po kliknięciu w przycisk. Np mam stworzoną metodę isClicked w klasie Button i czy mogę wywołać w tej metodzie inną dowolną funkcję którą zdefiniuję. A jeżeli nie to jaki jest inny sposób?

0

Przesyłam tutoriala, bo nie umiem tłumaczyć :(
http://docs.oracle.com/javase/tutorial/uiswing/events/actionlistener.html
Jak juz przejdziesz do metody to w niej możesz spokojnie odwoływac się do dowolnej metody należącej do tej klasy, możesz tworzyć jakieś nowe obiekty i odwoływac się do metod tego obiektu itp.

0

Mam taką klasę

class XButton extends MyComponent {

    public String name;
    public boolean invaded;

    public XButton(String s) {
        positionX = positionY = 100;
        sizeX = 100;
        sizeY = 30;
        name = s;
        isClicked = false;
        invaded = false;
public void isClickedAction(){}
    }
}

I jak kliknę w przycisk to wywołam metodę

sClickedAction()

tylko jak napisze w tej metodzie żeby np. wyświetlało tekst to będzie wyświetlało ten sam tekst dla każdego obiektu tej klasy. A ja chcę żeby mi wyświetlało coś innego.
Np. tworze se funkcji

void NewGame(){ ... }

i chcę to funkcji wywołać w public void isClickedAction(){}

0

Jak chcesz zeby ten tekst sie zmienial ?
Chodzi mi o to, ze tekst wcale nie musi byc identyczny, mozesz go wczytywac od użytkownika, może on być tworzony dynamicznie podczas trwania programu, moze byc zmieniany w konstruktorze. Wystarczy, ze zrobisz w klasie pole np. String message, a pozniej w sClickedAction() wykorzystujesz ten tekst.

0

No ale mi bardziej chodzi o wywoływanie różnych funkcji w metodzie

isClickedAction() 

Tak ze jak sobie stworze dwa przyciski to żeby każdy wywoływał inną funkcję lub metodę z poza klasy XButton

0

W normalnym guziku masz tak:
Tworzys spbie kilka guzikow:

JButton start = new JButton("Start");
JButton stop = new JButton("Stop");
//a przy bardziej rozbudowanych napisach na guziku radze tak zrobic:
JButton cancel = new JButton("Anuluj zadanie");
cancel.setActionCommand("Cancel");

//sluchaczy 
start.addActionListener(this);

//dodajesz guziki

frame.add(start);

Po nacisnieciu guzika generowane jest wydarzenie (event) i wywolywana jest metoda actionPerformed(ActionEvent e)
No i tam juz po nazwie sobie obslugujesz, albo mozesz użyć reflekcji (java.lang.reflect)

 public void actionPerformed(ActionEvent e)  {
    String cmd = e.getActionCommand();
    try {
      Method m = this.getClass().getDeclaredMethod("task"+cmd);
      m.invoke(this);
    } catch(Exception exc) { exc.printStackTrace(); }
  }

Co sprawi, ze po naciśnięciu np. guzika start zostanie wywołana funkcja taskStart();
W Twoim guziku musisz stworzyć klasę, która dziedziczy po AbstractButton

dodanie znaczników <code class="java"> - furious programming

0

Mozesz zrobic jeszcze tak:
(Znalazłem to w necie)

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

class CustButton extends JButton {

  public CustButton(String txt) {
    super(txt);
    setFont(new Font("Dialog", Font.PLAIN, 24)); 
  }

  public void paintComponent(Graphics g) {
    super.paintComponent(g);
    int w = getWidth();       // aktualna szerokość ...
    int h = getHeight();      // i wysokość komponentu
    g.setColor(Color.red);    // ustalenie koloru rysunku
    // rysowanie kwadracików
    g.fillRect(0, 0, 10, 10);
    g.fillRect(w-10, 0, 10, 10);
    g.fillRect(0, h-10, 10, 10);
    g.fillRect(w-10, h-10, 10, 10);
  }
}

public class ButtonTest extends JFrame {
	
	public ButtonTest() {
	  CustButton mb = new CustButton("To jest przycisk");
	  add(mb);
	  setDefaultCloseOperation(EXIT_ON_CLOSE);  // domyślna operacja zamknięcia okna: koniec pracy
	  pack();
	  setLocationRelativeTo(null);
	  setVisible(true);
	}

	public static void main(String args[]) {
	  new ButtonTest();	
	}
}

Tutaj guzik dziedziczy po klasie JButton, dzieki temu masz wszystkie opcje co normalny guzik.

dodanie znacznika <code class="java"> - furious programming

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