第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

JComboBox 事件 - Swing

JComboBox 事件 - Swing

交互式愛情 2022-11-30 10:56:23
如何確保 Item 是JCombobox從用戶而不是其他方法更改的?因為我也有改變項目的方法。但是當用戶更改了項目時,事件必須做一些事情。
查看完整描述

2 回答

?
撒科打諢

TA貢獻1934條經(jīng)驗 獲得超2個贊

最好的想法是用布爾標志標記您自己的事件,正如@LucA 所提議的那樣。但如果由于某些原因你不能這樣做,你可以嘗試檢查事件的發(fā)起者。如果發(fā)起者是您的組合框 - 事件由用戶觸發(fā)。這是一個例子:


import java.awt.EventQueue;

import java.awt.FlowLayout;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.event.InputEvent;

import java.util.Objects;


import javax.swing.JButton;

import javax.swing.JComboBox;

import javax.swing.JFrame;

import javax.swing.JList;

import javax.swing.WindowConstants;

import javax.swing.plaf.basic.ComboPopup;


/**

 * <code>JComboText</code>.

 */

public class JComboText {


    public static void main(String[] args) {

        String[] items = new String[] {"First", "Second", "Third", "Fourth"};

        JComboBox<String> combo = new JComboBox<>(items);

        combo.addActionListener(new ActionListener() {


            @Override

            public void actionPerformed(ActionEvent e) {

                boolean byUser = isTriggeredByUser(combo);

                System.out.println("Changed by: " + (byUser ? "user" : "program"));

            }

        });

        JButton button = new JButton("Clear selection");

        button.addActionListener(e -> combo.setSelectedItem(null));

        JFrame frm = new JFrame("Combo test");

        frm.setLayout(new FlowLayout());

        frm.add(combo);

        frm.add(button);

        frm.pack();

        frm.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

        frm.setLocationRelativeTo(null);

        frm.setVisible(true);

    }


    private static boolean isTriggeredByUser(JComboBox<?> combo) {

        // check whether the change was triggered by another component

        final ComboPopup popup = (ComboPopup) combo.getUI().getAccessibleChild(combo, 0);

        final JList<?> list = popup.getList();

        if (EventQueue.getCurrentEvent() instanceof InputEvent) {

            return Objects.equals(EventQueue.getCurrentEvent().getSource(), combo)

                    || Objects.equals(EventQueue.getCurrentEvent().getSource(), list);

        }

        return false;

    }

}

您可以復制該方法isTriggeredByUser并在您的程序中使用它。


查看完整回答
反對 回復 2022-11-30
?
拉風的咖菲貓

TA貢獻1995條經(jīng)驗 獲得超2個贊

這可能有效:

聲明一個布爾值,意思是“組合框正在被程序更改,而不是用戶”

每次您的代碼更改所選值時都將其設置為 true,之后再次設置為 false。

在您的 actionPerformed 事件中,如果您的布爾值為真,則不執(zhí)行任何操作。如果為假,則意味著用戶正在更改它。


查看完整回答
反對 回復 2022-11-30
  • 2 回答
  • 0 關(guān)注
  • 177 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號