读了好久源代码,才搞明白怎么回事,其实现在回过头来想想很简单,主要是寻找的过程艰难。

自定义一个control

在resources里面新建一个文件夹MyControls,新建一个名为my-nifty-drop-down-control.xml的文件。

<?xml version="1.0" encoding="UTF-8"?>
<nifty-controls xmlns="http://nifty-gui.lessvoid.com/nifty-gui"><controlDefinition
            style="my-nifty-drop-down-style"name="my-dropDown"controller="de.lessvoid.nifty.controls.dropdown.DropDownControl"inputMapping="de.lessvoid.nifty.controls.dropdown.DropDownControlInputMapping"viewConverterClass="com.happykai.crack3d.utils.MyDropDownViewConverter"><panel style="#panel"><interact onClick="dropDownClicked()"/><panel style="#panel-text"><image id="#text" height="22px"/></panel><panel style="#panel-icon"><image style="#icon"/></panel></panel></controlDefinition><popup id="dropDownBoxSelectPopup" style="my-nifty-drop-down-style" childLayout="absolute"controller="de.lessvoid.nifty.controls.dropdown.DropDownPopup"><interact onClick="close()"/><panel id="#panel" style="#list-panel" height="200px"><control id="#listBox" name="my-listBox" horizontal="optional" displayItems="$displayItems"selectionMode="Single" forceSelection="true"/></panel></popup><!-- DROP DOWN BOX POPUP (The Actual List this is) -->
</nifty-controls>

注意:里的name叫做name=”my-dropDown”,在其他xml里就把这个name当做control的名字。里一定要加viewConverterClass="com.happykai.demo.utils.MyDropDownViewConverter",引号中内容是重写的viewConverter类的名字

**原本的dropdown里panel里放的是text,如果是图片下拉框,就需要改成image,其他的布局自己照猫画虎在这个panel里定义就好”

在使用它的xml里添加引用

在要使用它的xml里加一句话,加载标签的下一级就行,与screen平级。

 <useControls filename="MyControls/my-nifty-drop-down-control.xml"/>

新建MyDropDownViewConverter.java

该类作用是实现了viewConverter类,在源码中有这样一句话

/**
* A simple implementation of DropDownViewConverter that will just use item.toString().
* This is the default DropDownViewConverter used when you don’t set a different implementation.
*
* @param
* @author void
public class SimpleDropDownViewConverter implements DropDownViewConverter {

}
*/
所以呢,要想自定义下拉列表,就需要实现这个类,照猫画虎就行。

public class MyDropDownViewConverter implements DropDown.DropDownViewConverter<NiftyImage> {@Overridepublic void display(@Nonnull Element itemElement, @Nonnull NiftyImage item) {ImageRenderer renderer = itemElement.getRenderer(ImageRenderer.class);if (renderer == null) {return;}renderer.setImage(item);}@Overridepublic int getWidth(@Nonnull Element itemElement, @Nonnull NiftyImage item) {return 0;}
}

调用

DropDown<NiftyImage> drop = screen.findNiftyControl(id, DropDown.class);
assert drop != null;
for (int i = 1; i <= Constants.TEXTURE_NUM; i++) {NiftyImage image =nifty.createImage(screen, "Textures/" + String.valueOf(i) + ".png", false);drop.addItem(image);
}
drop.selectItemByIndex((dropNum - 1) % Constants.TEXTURE_NUM);

ok,到这里自定义的带图片下拉框就完成了。

但是存在内存泄漏的问题,这样的下拉框构建12个以上就会是opengl的内存溢出,因为明明是一样的下拉框,它却不会复用,一遍又一遍地把图片加到内存中,导致程序崩溃(默认的下拉框控件也是一样,会内存泄漏)。

该问题尚且未找到解决办法,如有同学解决还望告知,感谢分享。没解决前只能从交互上避免出现十几个下拉框的问题了。

04 Nifty自定义带图片的下拉框相关推荐

  1. 如何实现自定义下拉组件,select下拉框样式自定义,带搜索的select下拉框

    1.实现的效果 2.实现说明 3.完整代码 一.实现的效果: 二.实现说明: 1.由于无法修改原生select中的option样式,因此自己通过ul,li实现下拉列表,用input实现回显框: inp ...

  2. c mvc ajax 返回下拉框,SpringMVC之ajax+select下拉框交互常用方式

    Insert title here //ajax+select三种常用交互方式 window.οnlοad=function(){ test(); } function test(){ alert(& ...

  3. LayUi数据表格数据太多导致下拉框卡顿问题

    LayUi数据表格数据太多导致下拉框卡顿问题 layui数据表格(详见官网) 根据官网示例 做出数据表格 示例根据官网表格展示 在layui官网 数据表格示例中 https://www.layui.c ...

  4. easyui根据select下拉框内容更新表单内容_Ant Design 4.0 的一些杂事儿 - Select 篇

    前几篇: Ant Design 4.0 的一些杂事儿 - Table 篇 Ant Design 4.0 的一些杂事儿 - Form 篇 聊完了 Table 和 Form 两个重型组件,我们来继续聊聊看 ...

  5. 【解决方案】win7计算机屏保的下拉框中,无照片选项,不能设置自定义图片

    手动增加计算机屏保 问题描述 解决方案 问题描述 发现在有的计算机中,想设置自定义的屏保照片时,在屏保下拉框中没有"照片的选项",导致无法选择本地照片作为屏保程序.即缺少如下标红选 ...

  6. Android自定义spinner下拉框实现的实现

    一:前言 本人参考博客:http://blog.csdn.net/jdsjlzx/article/details/41316417 最近在弄一个下拉框,发现Android自带的很难实现我的功能,于是去 ...

  7. Combo( 自定义下拉框) 组件

    本节课重点了解 EasyUI 中 Combo(自定义下拉框)组件的使用方法,这个组件依赖于 ValidateBox(验证框)组件 一. 加载方式 自定义下拉框不能通过标签的方式进行创建. <in ...

  8. winform 下拉框(自定义下拉框控件)

    项目中遇到需要下拉框列表内容为线类型或点类型图形的需求,想到可以使用手绘线条和图形的方式来实现下拉列表内容自定义,记录下来供大家参考学习之用. 在项目中添加一个组件 添加完之后会显示如下设计界面 这里 ...

  9. css下拉框带三角符号_创建带有符号的下拉列表

    css下拉框带三角符号 To make data entry easier, you can create a drop down list in an Excel cell, using data ...

  10. EasyExcel在项目中的应用-在web中导出带下拉框和批注的excel文件

    前言 ​ 好长一段时间没有更新博客了,最近刚刚找到实习工作,接触了企业中的项目,在这段时间的实习过程中,终于知道了企业级项目的体量和业务难度跟之前的小项目是完全不同的.10多天的适应期也逐渐让我找到了 ...

最新文章

  1. 增强for循环、Map接口遍历、可变參数方法
  2. Fatal error: Allowed memory size of 8388608 bytes exhausted (tried to allocate 359404 bytes) in
  3. jQuery图片延迟加载插件jQuery.lazyload
  4. php session传数组,php把数组存到session的方法
  5. C# 读写txt文件 写txt(IO) TXT追加
  6. 产品经理必会知识:万字长文 | 史上最全的付费会员体系分析
  7. 机械臂D-H坐标系的建立
  8. 面试问题总结——关于YOLO系列(三)
  9. 如花搞笑图片集锦(转贴)
  10. C语言 一行一行读取文件txt
  11. matlab 复数函数拟合,lsqcurvefit拟合结果为复数
  12. Android手机直播
  13. js 实现模糊搜索功能
  14. Win7共享文件夹的方法
  15. web前端基础——rotate实现旋转效果
  16. 计算机工程学院文艺例会,信息工程学院学生会第一次全体例会
  17. 软件工程文档编写格式要求
  18. 远程桌面如何连接--远程桌面管理与本地连接
  19. 《图算法》第七章 图算法实践-2
  20. python学习模拟电路_如何学习使用CircuitPython

热门文章

  1. 1 人抵 1 万名黑客的阿里女守护神,私底下竟然是这个样子!
  2. Hunger Snake 2
  3. MySQL8 NDB Cluster安装部署
  4. paddlepaddle_文件操作_画图操作_图片基本处理
  5. “我等了三年,就是想等一个机会!” 谈谈数据团队如何为自己争取资源!
  6. 高通---IGV:从安装到使用
  7. GRE词汇下载:与希腊神话有关的词汇
  8. extjs 中formPanel提交到action后返回json数据到ext中,但是ext页面不进入sucess也不进入failure
  9. 8本好书上新:越忙越要多读书 1
  10. 热电阻温度计 电阻温度探测器 直接浸入式清洁传感器 精密RTD 美国Burns 胶囊式铂电阻温度检测器 迷你RTD整体热电偶套管 气温传感器 测温传感器 温度传感器 温度传感器生产厂家 温度变送器