• idea开发jface、swt环境搭建


    背景

    1. jfaceswt很难找到合适的maven仓库来下载配套的版本
    2. ideaeclipse套件不友好
    3. eclipsewindowbuilder固然很好, 但本人更喜欢idea编程, 互相取长补短

    下载套件

    进入swt下载界面
    以当前最新的4.29为例, 点击:
    在这里插入图片描述

    找到全部并点击超链接:
    在这里插入图片描述

    这一步可能比较慢, 稍等一会…

    等待页面加载完成后, 点击选择国内镜像下载:
    在这里插入图片描述

    此时应该就开始下载了, 下载完成后解压至E:\repository\mvn\repository-4.29

    配置全局jdk

    此时在idea中打开Project Structure
    在这里插入图片描述
    选中Global Libraies并在右方添加所需包:
    在这里插入图片描述

    1. 不断重复第3、4步直至所有包导入完成
    2. 选择Global Libraies是为了后期本地打包方便

    下面是我们最终需要添加的包:

    E:\repository\mvn\repository-4.29\plugins\org.eclipse.core.commands_3.11.100.v20230708-0916.jar
    E:\repository\mvn\repository-4.29\plugins\org.eclipse.core.contenttype_3.9.100.v20230630-1232.jar
    E:\repository\mvn\repository-4.29\plugins\org.eclipse.core.jobs_3.15.0.v20230808-1403.jar
    E:\repository\mvn\repository-4.29\plugins\org.eclipse.core.resources.win32.x86_64_3.5.500.v20220812-1420.jar
    E:\repository\mvn\repository-4.29\plugins\org.eclipse.core.runtime_3.29.0.v20230726-0617.jar
    E:\repository\mvn\repository-4.29\plugins\org.eclipse.equinox.common_3.18.100.v20230730-1117.jar
    E:\repository\mvn\repository-4.29\plugins\org.eclipse.equinox.preferences_3.10.300.v20230630-1303.jar
    E:\repository\mvn\repository-4.29\plugins\org.eclipse.jface.databinding_1.15.100.v20230708-0916.jar
    E:\repository\mvn\repository-4.29\plugins\org.eclipse.jface.text_3.24.100.v20230727-0604.jar
    E:\repository\mvn\repository-4.29\plugins\org.eclipse.jface_3.31.0.v20230821-1552.jar
    E:\repository\mvn\repository-4.29\plugins\org.eclipse.swt.win32.win32.x86_64_3.124.100.v20230825-1346.jar
    E:\repository\mvn\repository-4.29\plugins\org.eclipse.swt_3.124.100.v20230825-1346.jar
    E:\repository\mvn\repository-4.29\plugins\org.eclipse.text_3.13.100.v20230801-1334.jar
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    示例

    此时环境已经搭建完成, 我们写个示例验证下:

    import org.eclipse.jface.viewers.*
    import org.eclipse.swt.SWT
    import org.eclipse.swt.graphics.Image
    import org.eclipse.swt.layout.FillLayout
    import org.eclipse.swt.widgets.*
    import javax.swing.CellEditor
    
    fun main() {
        val display = Display()
        val shell = Shell(display)
        shell.layout = FillLayout()
        // 创建 TableViewer
        val viewer = TableViewer(shell, SWT.BORDER or SWT.FULL_SELECTION)
        val table: Table = viewer.table
        table.headerVisible = true
        table.linesVisible = true
        // 创建表格列
        val column = TableColumn(table, SWT.NONE)
        column.setText("姓名")
        column.setWidth(100)
        // 设置内容提供器
        viewer.setContentProvider(MyContentProvider())
        // 设置标签提供器
        viewer.setLabelProvider(MyLabelProvider())
    
        // 添加双击事件监听器
        viewer.addDoubleClickListener { event ->
            if (viewer.getSelection() != null) {
                viewer.editElement(viewer.getSelection(), 0)
            }
        }
        // 设置输入数据
        viewer.setInput(arrayOf("张三", "李四", "王五"))
        shell.pack()
        shell.open()
    
        while (!shell.isDisposed()) {
            if (!display.readAndDispatch()) {
                display.sleep()
            }
        }
    
        display.dispose()
    }
    
    internal class MyContentProvider : IStructuredContentProvider {
        override fun dispose() {
        }
    
        override fun inputChanged(viewer: Viewer?, oldInput: Any?, newInput: Any?) {
        }
    
        override fun getElements(inputElement: Any?): Array<Any?> {
            return if (inputElement is Array<*>) {
                inputElement as Array<Any?>
            } else arrayOfNulls(0)
        }
    }
    
    internal class MyLabelProvider : LabelProvider(), ITableLabelProvider {
        override fun getColumnText(element: Any?, columnIndex: Int): String {
            return if (element is String) {
                element
            } else ""
        }
    
        override fun getColumnImage(element: Any?, columnIndex: Int): Image? {
            return null
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70

    运行结果:
    在这里插入图片描述

    打包

    在这里插入图片描述

    参考

    1. WindowBuilder、SWT、jface
  • 相关阅读:
    人活着最重要的是什么
    mysql的分组group by
    MySQL的存储过程
    bootz 启动 kernel
    pyppeteer模块常用方法
    我做了一个在线白板(二)
    今日消息查询易语言代码
    高可用--限流&熔断&降级
    最大优先队列的实现(思路分析) [数据结构与算法]
    华为云云耀云服务器L实例评测|华为云耀云服务器L实例评测包管理工具安装软件(六)
  • 原文地址:https://blog.csdn.net/Young4Dream/article/details/134543441