加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

swing – valueChanged gui列表执行两次

发布时间:2020-12-14 16:22:43 所属栏目:大数据 来源:网络整理
导读:当在这个简单的gui列表上做出选择时,我得到valueChanged在鼠标按下时执行两次,在鼠标按下时执行一次. import groovy.swing.SwingBuilderimport java.awt.*import java.swing.*import javax.swing.*def main(){ new SwingBuilder().edt { frame(title:'Testin
当在这个简单的gui列表上做出选择时,我得到valueChanged在鼠标按下时执行两次,在鼠标按下时执行一次.

import groovy.swing.SwingBuilder
import java.awt.*
import java.swing.*
import javax.swing.*


def main(){
    new SwingBuilder().edt {
        frame(title:'Testing',pack:true,show:true) {
            vbox {
                panel(){
                    textbox = label(text:'null')
                }
                panel(){
                    listing = list(valueChanged:{
                            mess(listing.selectedValue);// this code runs twice
                        },listData: ['test','another','test','and','again'])
                }
            }
        }
    }
}

def mess(mytext){
    new SwingBuilder().edt {
        frame(title:'Message',show:true){
            vbox {
                panel(){
                    label(text:mytext)
                }
            }
        }
    }
}

main();

我已经在stackoverflow上寻找了类似于这个问题的其他问题但是如果它是重复的话我没有用,我很抱歉我将删除它,但我不相信它.所有我想要做的就是让它不能在鼠标上执行.

解决方法

是的,使用Swing JList,当用户单击某行时,您会收到两个valueChanged事件.

第一次单击将具有event.valueIsAdjusting == true以指示用户正在更改值,第二次事件将具有event.valueIsAdjusting == false以显示已进行的选择(请参阅evaluation section of this bug report* here和事件documentation here)

更改:

valueChanged:{
   mess(listing.selectedValue);// this code runs twice
 }

至:

valueChanged:{ event ->
   if( !event.valueIsAdjusting ) mess(listing.selectedValue)
 }

应该修复这个……

(*应该注意,这不是一个错误,因为它的关闭状态可以看出):-)

编辑

要清除选择,您可以将main()更改为:

def main() {
  def data = ['test','again']
  def codeFired = false
  new SwingBuilder().edt {
    frame(title:'Testing',show:true) {
      vbox {
        panel(){
          textbox = label(text:'null')
        }
        panel(){
          listing = list listData: data,valueChanged: { event ->
            if( !event.valueIsAdjusting && !codeFired ) {
              mess( listing.selectedValue )
              codeFired = true
              listing.clearSelection()
              codeFired = false
            }
          }
        }
      }
    }
  }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读