• 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
  • 相关阅读:
    自动出价下机制设计系列 (二) : 面向私有约束的激励兼容机制设计
    Taro.navigateTo 使用URL传参数和目标页面参数获取
    2015软专算法题T2
    springboot集成kafka
    [39题] 牛客深度学习专项题
    前端性能优化之防抖&节流
    K8S集群master节点打污点:可让master节点参与pod调度
    购买阿里云服务器需要多少钱?活动价2000元-3000元的阿里云服务器汇总
    【算法】【递归与动态规划模块】判断字符串的顺序交错组成
    陆游只爱前妻唐婉,深情大渣男太虐了
  • 原文地址:https://blog.csdn.net/Young4Dream/article/details/134543441