簡體   English   中英

JLabel 不斷加快每個列表選擇

[英]JLabel keeps speeding up on each List Selection

list.getSelectionModel().addListSelectionListener(e -> {
    timer = new Timer( DELAY, new ActionListener()
    {

        @Override
        public void actionPerformed(ActionEvent arg0) {
            StockItem p = list.getSelectedValue();
            label.setText(p.toString2());
            label.setLocation(label.getLocation().x+1, label.getLocation().y);
            if(label.getLocation().x >= frame.getWidth()) {
                label.setLocation(0-label.getWidth(),label.getLocation().y);
            }    
        }

    });
    timer.start();
});

我創建了一個列表選擇偵聽器來檢查在 JList 中選擇了哪些當前項目,並且無論選擇什么項目都將調用另一個 class 中的 toString() 方法並將其設置為 JLabel 的文本。 但是,我剛剛在我的 JLabel 上實現了移動文本,每次選擇 JList 中的一個項目時,JLabel 的速度都會增加。 我想要它,所以速度保持不變,但我不知道該怎么做。

控制速度的部分代碼為label.setLocation(label.getLocation().x+1, label.getLocation().y);

任何解釋將不勝感激謝謝

每次選擇 JList 中的一項時,JLabel 的速度就會增加。

因為您的代碼會在每次選擇時啟動另一個 Timer。

計時器將繼續運行,直到您停止它。 由於您從不停止它,因此您將同時運行多個計時器。

您想在 ListSelectionListener 之外定義您的 Timer。

那么監聽器內部的邏輯就變成了這樣:

(if !timer.isRunning())
    timer.start();

或者問題是您甚至需要 ListSelectionListener 嗎?

您可以在創建 class 時自動啟動計時器。 每次觸發時,邏輯都會獲得選定的值。

當然,使用這種方法,您需要確保 getSelectedValue() 方法不返回 null (因為第一次顯示 GUI 時不會選擇任何項目)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM