Как использовать actionlistener в Scala Swing - PullRequest
0 голосов
/ 10 ноября 2019

Я хотел бы сделать счетчик кликов в Scala Swing . Я использовал для этого интерфейса ActionListener. Но я не знаю, правильно ли я это сделал. Программа работает, но я хочу выяснить, как это сделать в соответствии с лучшими практиками. Буду очень благодарен за ответ как правильно это сделать.

import javax.swing._
import java.awt._
import java.awt.event._

class UI extends JFrame {

  var title_ : String = "Hello, Swing in Scala"
  setTitle(title_)

  val textArea = new JTextArea
  var text : String = "Hello, Swing world in Scala!"
  textArea.setText(text)
  val scrollPane = new JScrollPane(textArea)

  val panel = new JPanel
  var text2 : String = "Click Here"
  val button =new JButton(text2)
  panel.add(button)

  var clicks:Int = 0

  def onClick(): Unit = {
    clicks += 1
    text = "Number of button clicks: " + clicks.toString
    textArea.setText(text)
  }

  button.addActionListener(new ActionListener {
    override def actionPerformed(e: ActionEvent): Unit = onClick() })

  getContentPane.add(scrollPane, BorderLayout.CENTER)
  getContentPane.add(panel, BorderLayout.SOUTH)
  setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
  setSize(new Dimension(600, 400))
  setLocationRelativeTo(null)

  def display() {
    setVisible(true)
  }
}

object SwingExample extends App {
    val ui = new UI
    ui.display()
    println("End of main function")
}

1 Ответ

0 голосов
/ 10 ноября 2019

есть простые вещи, которые улучшают качество кода и удобство обслуживания.

кажется, что text, text2 и title_ могут удалить и поместить это значение непосредственно в.

чтобы сократить его, попробуйте этот оператор для onClick

def onClick(): Unit = {
    clicks += 1
    textArea.setText(s"Number of button clicks: $clicks")
  }

см. Интерполяция строк .

, вы можете сократить свой ActionListener на

button.addActionListener(e => onClick())
...