JMonkeyEngine3——NiftyGui CheckBox

CheckBox

 CheckBox 控件显示一个简单的复选框,用户可以选中或取消选中。可以使用 CheckBoxBuilder 类从 Java 动态创建复选框,也可以使用<control name="checkbox"></control> 标签从 XML 创建复选框。

常用属性

Name Datatype Default Description
checked boolean false CheckBox 的初始状态。“true”表示 CheckBox 默认选中,“false”表示 CheckBox 默认未选中。

EventBus Notification

CheckBox 支持 EventBus 通知任何改变 CheckBox 状态的操作。在这种情况下,将使用 CheckBox 的 ID 作为事件的主题来发布 CheckBoxStateChangedEvent。

Java Builder 示例

1 // Using the builder pattern
2 control(new CheckboxBuilder("multiSelectionCheckBox") {{
3   checked(false); // start with uncheck
4 }});

XML 示例

1 <!-- simple default checkbox. please note: event notification requires an id -->
2 <control id="simpleCheckBox" name="checkbox" />

参考

https://github.com/nifty-gui/nifty-gui/wiki/CheckBox

案例

xml布局文件如下:

 1 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
 2 <nifty xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://nifty-gui.lessvoid.com/nifty-gui" xsi:schemaLocation="https://raw.githubusercontent.com/void256/nifty-gui/1.4/nifty-core/src/main/resources/nifty.xsd https://raw.githubusercontent.com/void256/nifty-gui/1.4/nifty-core/src/main/resources/nifty.xsd">
 3     <useControls filename="nifty-default-controls.xml"/>
 4     <useStyles filename="nifty-default-styles.xml"/>
 5     <screen id="screen0" controller="mygame.NiftyGuiTextField" >
 6         <layer id="layer0" childLayout="center">
 7             <panel id="panel0" height="57px" style="nifty-panel-simple" width="401px" align="center" childLayout="vertical" valign="center" y="-1px" x="-1px">
 8                 <control name="textfield" id="textField0" text="user name" width="50%" align="center" valign="center" y="109" x="21"/>
 9                 <control name="textfield" id="textField1" text="12355" width="50%" align="center" passwordChar="*" valign="center"/>
10             </panel>
11         </layer>
12     </screen>
13 </nifty>

Java代码如下:

 1 import com.jme3.app.SimpleApplication;
 2 import com.jme3.math.ColorRGBA;
 3 import com.jme3.niftygui.NiftyJmeDisplay;
 4 import de.lessvoid.nifty.Nifty;
 5 import de.lessvoid.nifty.NiftyEventSubscriber;
 6 import de.lessvoid.nifty.controls.CheckBoxStateChangedEvent;
 7 import de.lessvoid.nifty.controls.TextField;
 8 import de.lessvoid.nifty.controls.TextFieldChangedEvent;
 9 import de.lessvoid.nifty.screen.Screen;
10 import de.lessvoid.nifty.screen.ScreenController;
11 
12 /**
13  * @date 2024年7月12日16点25分
14  * @author JohnKkk
15  */
16 public class NiftyGuiCheckBox extends SimpleApplication implements ScreenController{
17 
18     private Nifty m_Nifty;
19     
20     public static void main(String[] args) {
21         NiftyGuiCheckBox niftyGuiLabel = new NiftyGuiCheckBox();
22         niftyGuiLabel.start();
23     }
24     
25     @NiftyEventSubscriber(id="checkbox0")
26     public final void onCheckBox0StateChangedEvent(final String id, final CheckBoxStateChangedEvent event){
27         System.out.println("CheckBox:" + id + ",选中状态:" + event.getCheckBox().isChecked());
28     }
29     
30     @NiftyEventSubscriber(id="checkbox1")
31     public final void onCheckBox1StateChangedEvent(final String id, final CheckBoxStateChangedEvent event){
32         System.out.println("CheckBox:" + id + ",选中状态:" + event.getCheckBox().isChecked());
33     }
34     
35     @NiftyEventSubscriber(id="checkbox2")
36     public final void onCheckBox2StateChangedEvent(final String id, final CheckBoxStateChangedEvent event){
37         System.out.println("CheckBox:" + id + ",选中状态:" + event.getCheckBox().isChecked());
38     }
39     
40     @Override
41     public void simpleInitApp() {
42         // 设置默认背景色
43         getViewPort().setBackgroundColor(ColorRGBA.DarkGray);
44         
45         // 初始化Nifty
46         NiftyJmeDisplay niftyDisplay = NiftyJmeDisplay.newNiftyJmeDisplay(
47                 assetManager,
48                 inputManager,
49                 audioRenderer,
50                 guiViewPort);
51         m_Nifty = niftyDisplay.getNifty();
52         // 将NiftyGUI显示对象添加到JME3中
53         guiViewPort.addProcessor(niftyDisplay);
54         
55         m_Nifty.fromXml("Interface/NiftyGuiCheckBox.xml", "screen0");
56         
57         // 禁用flyCam并显示鼠标
58         flyCam.setEnabled(false);
59         inputManager.setCursorVisible(true);
60     }
61 
62     @Override
63     public void bind(Nifty arg0, Screen arg1) {
64     }
65 
66     @Override
67     public void onStartScreen() {
68     }
69 
70     @Override
71     public void onEndScreen() {
72     }
73     
74 }

注意到第25~38行,我们为三个CheckBox都订阅了EventBus事件执行函数。

启动JME3程序,执行结果如下:

 我们还可以通过<interact>标签(基本事件参考)来与Java代码交互。

posted @ 2024-07-12 16:32  JhonKkk  阅读(25)  评论(0)    收藏  举报