2017-11-28 6 views
-2

Ich habe Codierung und ich kann den Fehler nicht sehen. Es ist kein "Fehler" direkt, aber wenn ich die Farbe blau drücke, wird der Hintergrund nicht blau. Ich habe versucht, diesen Code von der Klasse Meny (ActionListener) zu öffentlichen void actionPerformed (ActionEvent e) zu ersetzen, aber es funktioniert nicht.Fehler mit Java ActionListener

Hier ist der Code.

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

public class MenyTest extends JFrame { 
JPanel panel; 
JMenuBar menyrad; 
JMenu fargmeny, svmeny; 
JMenuItem rod, gron, bla, svart, gra, vit; 

public MenyTest() { 
    panel = new JPanel(); 
    panel.setBackground(Color.white); 
    add(panel); 

    menyrad = new JMenuBar(); 
    fargmeny = new JMenu("Färger"); 
    svmeny = new JMenu("SvartVitt"); 
    this.setJMenuBar(menyrad); 
    menyrad.add(fargmeny); 
    menyrad.add(svmeny); 

    rod = new JMenuItem("Röd"); 
    gron = new JMenuItem("Grön"); 
    bla = new JMenuItem("Blå"); 
    svart = new JMenuItem("Svart"); 
    gra = new JMenuItem("Grå"); 
    vit = new JMenuItem("Vit"); 

    fargmeny.add(rod); 
    fargmeny.add(gron); 
    fargmeny.add(bla); 

    svmeny.add(svart); 
    svmeny.add(gra); 
    svmeny.add(vit); 
} 

    public static void main(String[] args) { 
    MenyTest f = new MenyTest(); 
    f.setSize(500, 500); 
    f.setLocation(400, 150); 
    f.setTitle("MenyTest"); 
    f.setDefaultCloseOperation(MenyTest.EXIT_ON_CLOSE); 
    f.setVisible(true); 
} 

public class Meny extends JFrame implements ActionListener { 

public void actionPerformed(ActionEvent e) { 
    rod.addActionListener(this); 
    gron.addActionListener(this); 
    bla.addActionListener(this); 
    svart.addActionListener(this); 
    gra.addActionListener(this); 
    vit.addActionListener(this); 

    if (e.getSource() == rod) panel.setBackground(Color.red); 
    else if (e.getSource() == gron) panel.setBackground(Color.green); 
    else if (e.getSource() == bla) panel.setBackground(Color.blue); 
    else if (e.getSource() == svart) panel.setBackground(Color.black); 
    else if (e.getSource() == gra) panel.setBackground(Color.gray); 
    else if (e.getSource() == vit) panel.setBackground(Color.white); 
} 
+0

Wie pro Ihren Code sind Sie nicht einmal in der Lage die Aktion-Ereignis ausgelöst. Ist es in Ordnung, wenn ich den 'MenyTest' als JFrame benutze? – utkarsh31

+0

@ utkarsh31 Ja, es ist in Ordnung! – Djubi

Antwort

0
public class MenyTest extends JFrame implements ActionListener{ 

JPanel panel; 
JMenuBar menyrad; 
JMenu fargmeny,svmeny; 
JMenuItem rod,gron,bla,svart,gra,vit; 

public MenyTest() { 
    panel = new JPanel(); 
     panel.setBackground(Color.white); 
     add(panel); 

     menyrad = new JMenuBar(); 
     fargmeny = new JMenu("Färger"); 
     svmeny = new JMenu("SvartVitt"); 
     this.setJMenuBar(menyrad); 
     menyrad.add(fargmeny); 
     menyrad.add(svmeny); 

     rod = new JMenuItem("Röd"); 
     gron = new JMenuItem("Grön"); 
     bla = new JMenuItem("Blå"); 
     svart = new JMenuItem("Svart"); 
     gra = new JMenuItem("Grå"); 
     vit = new JMenuItem("Vit"); 

     fargmeny.add(rod); 
     fargmeny.add(gron); 
     fargmeny.add(bla); 

     svmeny.add(svart); 
     svmeny.add(gra); 
     svmeny.add(vit); 
     rod.addActionListener(this); 
     gron.addActionListener(this); 
     bla.addActionListener(this); 
     svart.addActionListener(this); 
     gra.addActionListener(this); 
     vit.addActionListener(this); 
} 

@Override 
public void actionPerformed(ActionEvent e) { 
    if (e.getSource() == rod) panel.setBackground(Color.red); 
     else if (e.getSource() == gron) panel.setBackground(Color.green); 
     else if (e.getSource() == bla) panel.setBackground(Color.blue); 
     else if (e.getSource() == svart) panel.setBackground(Color.black); 
     else if (e.getSource() == gra) panel.setBackground(Color.gray); 
     else if (e.getSource() == vit) panel.setBackground(Color.white); 

} 

}

public class Main { 

public static void main(String[] args) { 
     MenyTest f = new MenyTest(); 
     f.setSize(500, 500); 
     f.setLocation(400, 150); 
     f.setTitle("MenyTest"); 
     f.setDefaultCloseOperation(new JFrame().EXIT_ON_CLOSE); 
     f.setVisible(true); 
    } 


} 
+0

Ich habe Hilfe von Ihrem Code, danke! Aber ich musste den öffentlichen Klasse Haupt entfernen, weil ich bereits 2 Klassen habe. – Djubi

+0

Die bessere Klasse mit Haupt sollte getrennt sein, es ist bequem –

Verwandte Themen