簡體   English   中英

JButton不起作用?

[英]JButtons aren't working?

對於游戲,我制作了一個按鈕類,可用於菜單中的所有按鈕。 我終於設法使我的按鈕出現在屏幕上,但是現在當我單擊它們時,什么也沒發生。

我的按鈕類:

package menu;

import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JPanel;

public class Button extends JButton{

    public JButton button;
    public ImageIcon buttonImage;

    public int width, height;

    public String backgroundPath;
    public int x, y;
        public ActionListener listener;



public Button(String backgroundPath,int x, int y, ActionListener listener)

    {
        super();
        this.backgroundPath = backgroundPath;
        this.x = x;
        this.y = y;
        this.addActionListener(listener);   

        buttonImage = new 
            ImageIcon(PlayPanel.class.getResource(backgroundPath));
        button = new JButton();
        this.setIcon(buttonImage);
        this.setBounds(x, y, buttonImage.getIconWidth(), 
            buttonImage.getIconHeight());


    }


}

我知道菜單面板中可能存在錯誤(@ actionPerformed)。 代碼如下:

package menu;

import java.awt.*;
import java.awt.event.*;

import javax.swing.*;

@SuppressWarnings("serial")
public class MenuPanel extends JPanel implements ActionListener
{

    private Button playKnop, highScoreKnop, quitKnop, HTPKnop;
    private Tanks mainVenster;
    public MenuPanel menuPanel;

    int x = 95, width = 200, height = 50;



    public MenuPanel(Tanks mainVenster) 
    {
        this.mainVenster = mainVenster;
        this.setLayout(null); 

        playKnop = new Button("/buttons/PLAY.png",x, 350, menuPanel);       
        highScoreKnop = new Button("/buttons/HS.png",x, 460, menuPanel);
        HTPKnop = new Button("/buttons/HTP.png",x, 515, menuPanel);
        quitKnop = new Button("/buttons/QUIT.png",x, 570, menuPanel);


        this.add(playKnop);
        this.add(quitKnop);
        this.add(HTPKnop);
        this.add(highScoreKnop);

        validate();

    }


    public void actionPerformed(ActionEvent ae)
    {
        if (ae.getSource() == playKnop){
        mainVenster.switchPanel(new PlayPanel(mainVenster));

    } else if (ae.getSource() == quitKnop) {
        mainVenster.switchPanel(new QuitPanel(mainVenster));

    } else if (ae.getSource() == HTPKnop) {
        mainVenster.switchPanel(new HTPPanel(mainVenster));

    } else if (ae.getSource() == highScoreKnop) {
        mainVenster.switchPanel(new HSPanel(mainVenster));
    }

    }

}

我認為錯誤是我正在編寫mainVenster(面板/窗口的Venster =荷蘭語)並且我可能應該編寫其他參數的事實。 問題是我不知道哪個。

要定義在監聽你的按鈕,所以你必須引用類本身作為this

playKnop = new Button("/buttons/PLAY.png",x, 350, this);       
highScoreKnop = new Button("/buttons/HS.png",x, 460, this);
HTPKnop = new Button("/buttons/HTP.png",x, 515, this);
quitKnop = new Button("/buttons/QUIT.png",x, 570, this);

您已經具有menuPanel屬性,因此在創建類時可以分配一個值,在這種情況下為this

menuPanel = this;

但我不建議您刪除此屬性或將其重命名為_this_menuPanel以同意約定。

有一個java.awt.Button類。 我會考慮不調用您的新按鈕類Button ,以防止任何名稱空間混亂。

你需要通過this來代替menuPanel作為ActionListener為了你們的按鈕:

playKnop = new Button("/buttons/PLAY.png",x, 350, this);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM