我目前正在尝试使用scala对扫雷进行编码,但我找不到通过右键单击按钮的方法。
我已经在互联网上搜索了它的方法,但我当然无法找到它。
如果有人能帮助我,我会非常感激:)
谢谢,
Schnipp
(注意:Scala对我来说是一种新语言,我不是Java用户,所以如果我的问题听起来很蠢,我很抱歉)
编辑:
我正在尝试找到(或实现)一个函数' ButtonClickedRight'可以听到右键单击按钮。
像这样import scala.swing._
import scala._
import scala.swing.event._
object Right extends MainFrame with App {
title = ""
visible = true
val b = new button("")
listenTo(b)
reactions += {
case ButtonClicked(`b`) => *code*
case ButtonClickedRight(`b`) => *code*
}
}
编辑2 -
我想知道用户是否点击了按钮" 1"或不。我遇到的问题是这个代码打印"鼠标点击" + e.point +"当我点击标签而不是按钮时,键入" + e.modifiers。
object App extends SimpleSwingApplication {
lazy val ui = new GridPanel(2,1) {
contents += new Button("1")
contents += new Label("2")
listenTo(mouse.clicks)
reactions += {
case e: MouseClicked =>
println("Mouse clicked at " + e.point+" type "+e.modifiers)
}
}
def top = new MainFrame {
contents = ui
visible = true
preferredSize = new Dimension(500,500)
}
}
答案 0 :(得分:2)
按钮事件通过特定发布商.mouse.clicks
触发。
import scala.swing._
import scala.swing.event._
object App extends SimpleSwingApplication {
lazy val ui = new GridPanel(2,1) {
val button = new Button("1")
contents += button
contents += new Label("2")
listenTo(button.mouse.clicks) // !
reactions += {
case evt @ MouseClicked(`button`, pt, _, _, _) =>
val which = evt.peer.getButton
if (which > 1) {
println(s"Mouse clicked at (${pt.x}; ${pt.y}) - button: $which")
}
}
}
lazy val top = new MainFrame {
contents = ui
size = new Dimension(500,500)
}
}
请注意,至少在Linux上我的右键有3号而不是2.你也可以使用triggersPopup
标志,但是你必须确保同时监控MousePressed
和MouseReleased
,因为这个标志是平台依赖的。
答案 1 :(得分:0)
我认为你是在正确的道路上,因为我对scala波动的理解我认为问题在于你没有正确地附加听众。首先,我将按钮分配给一个值,并仅在其上调用listenTo:
create external table table1_orc(
col1 string,
col2 string,
col3 int
PARTITIONED BY (
`year` string,
`month` string,
`day` string)
ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.orc.OrcSerde'
STORED AS INPUTFORMAT
'org.apache.hadoop.hive.ql.io.orc.OrcInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat'
LOCATION '/base_path_orc/';
set hive.exec.dynamic.partition=true;
insert overwrite table table1_orc partition(year,month,day) select * from table1 where year = '2015' and month = '10' and day = '01';
然后,在反应中,如果它来自按钮,我会编写模式检查(如果你只调用val button = new Button("1")
listenTo(button)
通过按钮可能是多余的)并且它有正确的按钮:
listenTo
因此,您在编辑中提供的代码将变为:
case ButtonClicked(b) if b == button && b.peer.getButton == MouseEvent.BUTTON_2 => ...
答案 2 :(得分:0)
以下对我有用:
new Button {
listenTo(mouse.clicks)
reactions += {
case MouseClicked(_, _, c, _, _) => handleClick(c == 0)
}
}
def handleClick(isLeftClick: Boolean): Unit = {
//
}