Scala教程(十九)Scala界面GUI编程

这篇Scala教程介绍了如何使用Scala进行GUI编程,基于Java的Swing框架。内容涵盖前言、创建第一个Swing程序、面板与布局管理以及事件处理机制。通过示例展示了Scala开发图形用户界面的基本步骤和方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

 

Scala教程(十九)Scala界面GUI编程

 

 

1 GUI编程


1.1 前言

   Scala开发图形用户界面(GUI)的应用程序基于一个Scala库,该类库提供对JavaSwing框架的GUI类访问。该类库和它的下层的Swing类很像,隐藏了大部分的复杂度,使Scala开发图形用户界面开发变得容易。


1.2 第一个Swing程序

使用Swing编程,你需要从ScalaSwingAPI导入类。import scala.swing._

    // 导入scala.swing下所有的包
    import scala.swing._
    
    // 实现SimpleSwingApplication抽象类  // 重写top方法,返回Frame类型
    object HelloGUI extends SimpleSwingApplication {
      // MainFrame是一个容器
      def top = new MainFrame {
        // title、content空器的属性
        title = "First Swing App"
        contents = new Button {
          text = "Click me"
        }
      }
    }

执行结果:

      

1.3 面板与布局

JavaGUI,容器是很重要图形界面开发的一种思想,同样在Scala中也提供了容器的概念。面板:用于容纳将构建的按钮、标签等组件。布局:使用Panel类的各种子类实现各种不同的布局。   

    import scala.swing.SimpleSwingApplication
    import scala.swing.MainFrame
    import scala.swing.Button
    import scala.swing.Label
    import scala.swing.BoxPanel
    import scala.swing.Orientable
    import scala.swing.Orientation
    import scala.swing.Swing

    object GuiPanelLayout extends SimpleSwingApplication {
      def top = new MainFrame {
        // 窗口标题
        title = "Second GUI";
    
        // 构建按钮组件
        val button = new Button {
          // 设置按钮上的文字
          text = "Scala"
        }
    
        // 构建标签
        val label = new Label {
          // 设置标签上的文字
          text = "Here is Spark!!!";
        }
    
        // 构建面页面,并将面板设置到窗口,BoxPanel=>Orientation.Vertical,垂直布局
        contents = new BoxPanel(Orientation.Vertical) {
          // 将按钮和标签添加到容中
          contents += button;
          contents += label;
          // 设置边框,上下左右都是50
          border = Swing.EmptyBorder(50, 50, 50, 50);
        }
      }
    }

执行结果:


1.4 事件处理

Swing的事件模型中,组件可以发起(触发)一个事件。JavaScala基本上用相同的“发布/订阅”方式处理事件:组件可以为发布者,也可以为订阅者。发布者发面事件,订阅者向发布者订阅从而在任何发布的事件发生时得到通知。发布者又称:“事件源”,访阅者又称作:“事件监听器”。如:Button是一个事件源,发布一个事件ButtonClicked事件,表示该按钮被点击。

    import java.io.File;
    import scala.swing.event.ButtonClicked;
    import scala.swing.event.ActionEvent;
    import scala.swing.SimpleSwingApplication;
    import scala.swing.FileChooser;
    import scala.swing.Button;
    import scala.swing.Label;
    import scala.swing.FlowPanel;
    import scala.swing.MainFrame;
    
    object GUIEvent extends SimpleSwingApplication {
      // 文件选择器
      var fileChooser = new FileChooser(new File("."));
      // 设置选择器的标题
      fileChooser.title = "fileChooser"
    
      // 定义按钮
      val button = new Button {
        // 设置按钮的文字
        text = "Choose a File from local";
      }
    
      // 设置标签,设置标签文本内容
      val lable = new Label {
        text = "No any file selected yet"
      }
    
      // 创建一个FlowPanel面板容器
      val mainPanel = new FlowPanel {
        // 将创建 的按钮和标签组件,添加到FlowPanel容器中
        contents += button;
        contents += lable;
      }
    
      def top = new MainFrame {
        // 设置窗口标题
        title = "Scala Gui Programing advanced!!!";
        // 将面板添加到窗体上
        contents = mainPanel;
        // 监听button
        listenTo(button);
    
        // 事件处理
        reactions += {
          // 匹配按钮点击事件
          case ButtonClicked(e) => {
            // 弹出打开选择文件弹出框
            val result = fileChooser.showOpenDialog(mainPanel);
            // 判断选择是文件
            if (result == FileChooser.Result.Approve) {
              // 改变lable文本为:选择文件的路径
              lable.text = fileChooser.selectedFile.getPath;
            }
          }
        }
      }
    }

执行结果:


执行结果:点击按钮事件


 


    --以上为Scala界面GUI编程,谢谢大家对我的关注。

                                                                                                                                                                                      ——厚积薄发(yuanxw)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值