2014-05-22 4 views
1

클릭 할 때 이미지를 전환하는 맞춤 버튼이있어서 mouseEventClick을 처리해야합니다. 그러나 그것은 "inputEvent (NiftyInputEvent inputEvent)"함수의 keyEvent에만 반응합니다 ...NiftyGUI가 포함 된 맞춤 컨트롤러

NiftyMousePrimaryClickedEvent를 전달해야하지만 Controller 클래스를 구현하지 않아야합니다. ? 여기

내 사용자 정의 이미지 버튼 : 여기

public class ImageButtonControl implements Controller{ 
private Nifty nifty; 
private Screen screen; 
private Element img1; 
private Element img2; 
private Properties properties; 
private boolean isPressed = false; 
private ImageRenderer render1; 
private NiftyImage imageNifty1; 
private NiftyImage imageNifty2; 
private FocusHandler focusHandler; 

@Override 
public void bind(
    final Nifty nifty, 
    final Screen screenParam, 
    final Element element, 
    final Properties parameter, 
    final Attributes controlDefinitionAttributes) { 
    this.nifty = nifty; 
    this.screen = screenParam; 
    this.properties = parameter; 
    img1 = element.findElementByName("image-1"); 
    img2 = element.findElementByName("image-2"); 
    initImages(this.nifty, this.screen, properties.getProperty("img-1"),properties.getProperty("img-2")); 
    //focusHandler = screenParam.getFocusHandler(); 
    System.out.println("Initialisation completed.");} 
@Override 
public void init(Properties prprts, Attributes atrbts) { 
    //throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. 
} 

@Override 
public void onStartScreen() { 
    //throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. 
} 

@Override 
public void onFocus(final boolean getFocus) { 
    //super.onFocus(getFocus); 
    System.out.println("---Clicked event focus---"); 
    //throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. 
} 

@Override 
public boolean inputEvent(NiftyInputEvent inputEvent) { 
    System.out.println("---Clicked event focus---"); 
    return false; 
} 


public void switchImage(){ 
    //ImageRenderer imageRenderer = img1.getRenderer(ImageRenderer.class); 
    if(isPressed){ 
     isPressed = false; 
     //img1.show(); 
     //img2.hide(); 
     System.out.println("Clicked event"); 
    }else{ 
     isPressed = true; 
     //img1.hide(); 
     //img2.show(); 
     System.out.println("Clicked event"); 
    } 
} 

private void initImages(Nifty nifty, Screen screen, String imgPath1, String imgPath2) { 
    NiftyRenderEngine renderEngine = nifty.getRenderEngine(); 
    imageNifty1 = renderEngine.createImage(screen,imgPath1,false); 
    imageNifty2 = renderEngine.createImage(screen,imgPath2,false); 
}} 

내 XML입니다 :

<controlDefinition name="imagebutton" style="nifty-panel-style" controller="de.lessvoid.nifty.customs.imagebutton.ImageButtonControl"> 
    <panel style="#panel" childLayout="overlay" focusable="true" visibleToMouse="true" width="$width" heigth="$height"> 
     <image id="img-1" name="image-1" style="#select" filename="$img1" visibleToMouse="true"/> 
     <image id="img-2" name="image-2" style="#select" filename="$img2" visibleToMouse="true"/> 
    </panel> 
    </controlDefinition> 

답변

1

가장 좋은 방법은 패널에 '상호 작용'요소를 추가하는 것입니다 :

<controlDefinition name="imagebutton" style="nifty-panel-style" controller="de.lessvoid.nifty.customs.imagebutton.ImageButtonControl"> 
    <panel style="#panel" childLayout="overlay" focusable="true" visibleToMouse="true" width="$width" heigth="$height"> 

     <!-- add this line to the panel --> 
     <interact onClick="onClick()" /> 

     <!-- ... your other stuff --> 

및 해당 'onClick()'핸들러 메서드를 Controller 구현에 추가하십시오.

public class ImageButtonControl implements Controller { 
    ... 

    public boolean onClick() { 
     // TODO add mouse click handling here 
    } 

Nifty는 내부 컨트롤에서 상향식으로 시작하여 스크린 컨트롤러로 위쪽으로 시작하여 첫 번째 일치가 발생하여 호출됩니다.