繁体   English   中英

实现Java鼠标侦听器,自定义gui

[英]Implementing java mouse listeners, custom gui

我正在开发当前使用slick2d + lwjgl的游戏,并且正在尝试为gui组件实现侦听器。 由于我目前很沮丧,我一直在想如何做到这一点。 我以为我可以做这样的事情

GuiComponent类...

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");
        }
    });
 }

Slick2D提供了几个组件 ,不知道您是否看过。 也许您可以使用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");
        }
    });
 }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM