name des Jbuttons wird mit can not be resolved markiert


Status
Dieses Thema wurde gelöst! Zur Lösung gehen…

tom23

Grünschnabel
#1
Ich möchte das wenn einer meiner JButtobs gedrückt wird das ein text ausgegeben wird dafür müsste nur noch meine JButton dessen name nach rechere scheinbar in eine if else abfrage kommt
Code:
else if (ae.getSource() == al.button1) {
    home.setLabelText(("button1 wurde gedrückt"));
aber Button1 wird immer unterstriechen und an der seite steht : button1 can not be resolved or is not a field
weiß wer woran das liegt ?
 

vfl_freak

Premium-User
#4
Moin,

die Fehlermeldung sagt Dir (etwas frei übersetzt), dass Deine Variable "nicht aufgelöst werden kann oder nicht bekannt ist"!
Was soll denn Deiner Meinung nach "actionListener.button" sein??
Ein ActionListener kann keinen Button 'haben', zudem musst Du 'button1' irgendwo deklarieren!

Aber mal in Blaue geschossen: vermutlich sollte der Button 'home' zugeordnet werden ?!?!?
Poste mal den ganzen (relevanten) Code!

VG Klaus
 

tom23

Grünschnabel
#5
Was genau ist in diesem Fall relevant ich kann das leider noch nicht so gut einschätzen da ich noch nicht lange programmiere.
 

tom23

Grünschnabel
#6
Hier erstelle ich den Button (Haben ihn in Montag umbennant)
Code:
tbar.add( montag = new JButton ("Montag"));
und hier wird der ActionListener hinzugefügt
Code:
montag.addActionListener(al);
 

vfl_freak

Premium-User
#7
Moin,

es liegt mit Sicherheit nicht nur an einer Zeile, sondern eher am Zusammenhang!

Was genau ist in diesem Fall relevant ich kann das leider noch nicht so gut einschätzen da ich noch nicht lange programmiere.
Dann poste im Zweifel den gesamten Code!!!
Hier hat keiner Lust rumzuraten, was du wo gemacht hast oder auch nicht!

VG Klaus
 

zerix

Hausmeister
Moderator
#8
Hey,

ich rate dennoch mal. Bei dem bisschen Code, den du gepostet hast, würde ich mal sagen, dass die Zeile eher so lauten sollte:

Java:
 if (al.getSource() == montag)
Viele Grüße
Sascha
 

tom23

Grünschnabel
#9
Java:
package menü;

import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class menü extends JFrame implements ActionListener
{
    /**
     *
     */
    private static  long serialVersionUID = 1L;

    public static void main (String[] args )
    {   
        JButton montag;
        JButton dienstag;
        JButton mittwoch;
        JButton donnerstag;
        JButton freitag;
        JLabel Label;
        
    JFrame Hauptmenü = new JFrame ("Hauptmenü");
    Hauptmenü.setSize(400,400);
    Label = new JLabel();
    Label.setVerticalAlignment(SwingConstants.CENTER);
    Label.setHorizontalAlignment(SwingConstants.CENTER);
    Label.setVisible(true);
    JToolBar tbar = new JToolBar();
    
    
    tbar.add( montag = new JButton ("Montag"));
    tbar.add( dienstag = new JButton ("Dienstag"));
    tbar.add( mittwoch = new JButton ("Mittwoch"));
    tbar.add( donnerstag = new JButton("Donnerstag"));
    tbar.add( freitag = new JButton("Freitag"));
    
    ActionListener al = new ActionListener () {

        @Override
        public void actionPerformed(ActionEvent e) {
            // TODO Auto-generated method stub
            
        }
    };
    
    
    montag.addActionListener(al);
    dienstag.addActionListener(al);
    mittwoch.addActionListener(al);
    donnerstag.addActionListener(al);// statt al oder null eventuel etwas anderser
    freitag.addActionListener(al);
    
    Hauptmenü.add(Label);
    Hauptmenü.add(tbar);
    Hauptmenü.setVisible(true);}
    
    @Override
    public void actionPerformed(ActionEvent e) {
        // TODO Auto-generated method stub
        
    }

    public static void setLabelText(String string) {
        // TODO Auto-generated method stub
        
    }

    
        
    }
Der actionListener soll in dem folgendem teil abgefragt werden
Code:
package menü;

import javax.swing.*;
import java.awt.Component;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.EventObject;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class menü2 extends menü{

    public static void main(String[] args)
    {
        menü2 m = new menü2();
        m.setVisible(true);

    }
        
    
public void actionPerformed (ActionEvent ae) {
    
if( al.getSource() == montag) { //null bezieht sich wahrscheinlich auf java objekte und ist deshalb ungeignet
    menü.setLabelText(("Montag"));
}
else if (ae.getSource() == al.dienstag) {
    menü.setLabelText(("Dienstag"));
}
else if (ae.getSource() == al.mittwoch) {
    menü.setLabelText(("Mittwoch"));
}
else if (ae.getSource() == al.donnerstag) {
    menü.setLabelText(("Donnerstag"));
}
else if (ae.getSource() == al.freitag) {
    menü.setLabelText(("Freitag"));
}
}
}
in zeile 23 habe ich den tipp von zerix angewendet deswegen ist diese anders als die folgenden
 

zerix

Hausmeister
Moderator
#11
Ok, jetzt wird es klar.
Bei dir ist al der ActionListener, der in der Klasse menü definiert wird genau wie die Buttons. Die kannst du dann nicht in der Klasse menü2 benutzten, weil die sie ja nicht kennt. Eine Klasse bildet einen eigenen Namensraum und nur dort sind die Namen bekannt.

Pack mal den Code in die actionPerformed von al und entferne die actionPerformed in der anderen Klasse.
Java:
if( ae.getSource() == montag) { //null bezieht sich wahrscheinlich auf java objekte und ist deshalb ungeignet
    menü.setLabelText(("Montag"));
}
else if (ae.getSource() == dienstag) {
    menü.setLabelText(("Dienstag"));
}
else if (ae.getSource() == mittwoch) {
    menü.setLabelText(("Mittwoch"));
}
else if (ae.getSource() == donnerstag) {
    menü.setLabelText(("Donnerstag"));
}
else if (ae.getSource() == freitag) {
    menü.setLabelText(("Freitag"));
}
Wie du auf die Idee kommst warum al die Buttons kennen soll, verstehe ich allerdings nicht.

Bevor du dich weiter mit GUIs beschäftigst würde ich dir eher empfehlen dich nochmal mit den Namensräumen zu beschäftigen
Viele Grüße
Sascha
 
Status
Dieses Thema wurde gelöst! Zur Lösung gehen…