Håller på med ett litet spel. Prylen som nu inte funkar är när mouseClicked-metoden ska ta emot vilken av de 4 knapparna som finns är klickad.
Så ser det tex ut. (a är en av a,b,c,d - knappobjekten):
--------
public void mouseClicked (MouseEvent e){
if(e.getSource()==a){
labelval.setText("FUSK!");
}
------------------
Varje knappobjekt har alltså sin egen såndär if-sats, men när jag kör programmet körs bara else-satsen.
Så här ser motsvarande knappobjekt ut:
-------------------
Button a = new Button("FUSK!");
-----------------------
mouseListenern har jag testat på annat sätt och då verkade den funka fint:
---------------------
a.addMouseListener(this);
------------------------
Frågan är: varför fattar inte if-satsen att knapp a är tryckt?
hej o hilsen från
pröva så här:
public void mouseClicked (MouseEvent e){
Button tmp = (Button) e.getSource();
if(tmp.equals(a)){
labelval.setText("FUSK!");
}
}
mvh
phonk
ViktorMedlem sedan aug. 20021 752 inlägg Är det inte bättre att använda ett actionEvent? Det är ett actionevent som skapas när du trycker på knappen (altså på din button, inte din mouse button :) ).
/Viktor
hej. tack för svaren!
Ja helt klart vore det kanske bättre med actionevent, så jag ändrade allt till det i stället.
Men saken är den att det fortfarande inte funkar. Det är ännu bara else-satsen som körs.
Har ännu inte provat phonks förslag.
Man ska inte använda instanceof? Provade det lite grann med det gav inget, men det kan bero på att jag inte är säker på användningsområdet.
ViktorMedlem sedan aug. 20021 752 inlägg Som vanligt, lägg in lite mer kod så ska det nog gå att lösa. :)
Framförallt koden för hur du skapar knappen och var du lägger in den i ditt fönster/applet.
Det ska fungera med e.getSoruce()==a, så länge det är a som ligger i fönstret dvs. instanceof ska du inte använda eftersom den bara kollar om ett objekt är av en viss typ, du skulle altså få true oberoende vilken knapp du har tryckt på om du skulle skriva
if(e.getSource() instanceof a)
{
}
eftersom knappen (e.getSource()) är en Button och a är en instans av en Button. Men när jag skriver detta så blir jag lite osäker på om man kan ta en instanceof mellan 2 instanser, men hur som helst så är det inte instanceof som du ska använda :)
/Viktor
Tack igen för svar!
Jag har skalat bort en del av koden...råkade även få med mig en del av label-koden vars fortsättning återkommmer en bit ner. Men label-grejset funkade som det skulle.
Klistrar in en bit av koden o blir tacksam om du kollar o ser om du hittar felet. Hoppas jag inte tog bort för mycket.
Här kommer den:
-----------------------
import java.awt.*;
import java.awt.event.*;
import extra.*;
public class Speltest {
public static void main(String[] args) {
Fenster tfenster = new Fenster();
}
}
class Fenster
extends ExtendedFrame
implements ActionListener {
private Label label1;
private Label label2;
private Button b;
private Button a;
public Fenster() {
setLocation(200, 200);
setSize(300, 350);
setBackground(Color.gray);
setResizable(false);
//nedre delen:
Panel p = new Panel(new GridLayout(2, 1, 10, 10));
Panel p1 = new Panel(new FlowLayout(FlowLayout.CENTER, 10, 10));
Button a = new Button("knapp a");
Button b = new Button("knapp b");
p1.add(a);
p1.add(b);
p.add(p1);
add(p, BorderLayout.SOUTH);
a.addActionListener(this);
b.addActionListener(this);
setVisible(true);
}
public void actionPerformed(ActionEvent e) {
if (e.getSource() == a) {
labelval.setText("ojoj");
}
if (e.getSource() == b) {
labelval.setText("finemangs");
}
else
labelval.setText("pust");
}
}
----------------------------
hej!
ViktorMedlem sedan aug. 20021 752 inlägg Du deklarerar 2 Button a, ett globalt objekt och sedan när du skapar knappen så deklarerar du en ny lokal variabel som också heter a, det är den som hamnar i ditt fönster, men sedan när du kör din e.getSource()==a så kollar du om det var den globala knapp a som trycktes.
ändra koden
Button a = new Button("knapp a");
Button b = new Button("knapp b");
till
a = new Button("knapp a");
b = new Button("knapp b");
så ska det fungera :)
En annan ska, använd gärna kod taggarna på forumet när du postar kod, då blir det lättare att läsa. [_kod] och [/_kod], fast utan _
/Viktor
wow!
Du fixade det!
Det löste biffen. Tusen tack.
ha en trevlig fredagkväll!
:birp
hej hej!