实现java鼠标监听器,自定义gui

时间:2015-12-25 05:37:38

标签: java user-interface lwjgl mouselistener slick2d

我正在使用slick2d + lwjgl进行游戏,我正在尝试为gui组件实现侦听器。我想知道如何做到这一点,因为我目前难倒。我以为我可以做这样的事情

GuiComponent class ....

public void addListener(MouseAdapter e){
   // Stuck on this part
}

将其实现到像这样的菜单中

gComponent.addListener(new MouseAdapter(){

   @Override
        public void mouseClicked(MouseEvent e){
            // listener logic

        }
}

我不知道如何在addListener方法中实际触发mouseClicked方法,因为当我运行它时,没有任何事情发生,除非我是妄想。无论如何,任何帮助确实有帮助,即使你只是发送给我javadoc或类似的东西。谢谢你们和他们圣诞快乐:)

编辑:

GuiComponent类

package com.connorbrezinsky.turbulent.gui;

import java.awt.event.MouseAdapter;

import org.newdawn.slick.Color;
import org.newdawn.slick.Graphics;
import org.newdawn.slick.Image;

public class GuiComponent {

int x, y, width, height;

Color color;
Image i;

public GuiComponent(Gui gui, int _x, int _y, int w, int h, Color c) {
    gui.components.add(this);
    x = _x;
    y = _y;
    width = w;
    height = h;
    color = c;
}

public GuiComponent(int _x, int _y, int w, int h, Color c) {
    x = _x;
    y = _y;
    width = w;
    height = h;
    color = c;
}

public GuiComponent(Gui gui, int _x, int _y, int w, int h) {
    gui.components.add(this);
    x = _x;
    y = _y;
    width = w;
    height = h;
    color = Color.white;
}

public GuiComponent(int _x, int _y, int w, int h) {
    x = _x;
    y = _y;
    width = w;
    height = h;
    color = Color.white;
}

public void addText(String s){

}

public void addSprite(Image s){
    i = s;
}

public void render(Graphics g){
    if(i == null) {
        g.setColor(color);
        g.fillRect(x, y, width, height);
    }else{
        i.draw(x,y,width,height);
    }
}

public void addListener(MouseAdapter e){
    // stuck here
}

}

菜单类

中的示例
GuiComponent guiTest = new GuiComponent(20, 20, 50, 10);

public void update(GameContainer arg0, StateBasedGame arg1, int arg2)    throws SlickException{
  guiTest.addListener(new MouseAdapter(){
        @Override
        public void mouseClicked(MouseEvent e){
            System.out.println("click");
        }
    });
 }

1 个答案:

答案 0 :(得分:1)

Slick2D提供several components,我不知道您是否已经看过它们。也许你可以使用AbstractComponent,继承它来做你期望的事情。它似乎提供了您想要自己实现的addListeners方法。它说简化你自己的代码。

然后要添加一个监听器,您可以使用gameContainer。通过gc.getInput().addListener()

使用您的代码,它将类似于:

GuiComponent guiTest =新的GuiComponent(20,20,50,10);

public void update(GameContainer arg0, StateBasedGame arg1, int arg2)    throws SlickException{
  arg0.getInput().addListener(new MouseAdapter(){
        @Override
        public void mouseClicked(MouseEvent e){
            System.out.println("click");
        }
    });
 }