2

Windows7 OS のデスクトップでうまく動作する Java アプリケーションを作成しました。Windows 8環境でプログラムを実行しようとしました。使用端末はタブレットです。Java アプリケーションがインストールされ、実際に実行されました。しかし、問題はダブルタップに関するものです。そのプログラムには、ダブルクリックして項目を選択するときのようなものがあります。ただし、タブレットでは、それをダブルタップする必要があります。ただし、アイテムをダブルタップしても何も起こりません。最初のクリックでのみ強調表示されますが、ダブルタップしても何も表示されません。これに関して Windows 8 タブレットで何が問題になる可能性がありますか。これは Windows 8 の Java と関係がありますか?

どんなアイデアでも大歓迎です。ありがとう

[更新:] イベントコード:

    private void jListItemsMouseClicked(java.awt.event.MouseEvent evt) {                                           
        System.out.println("Product Clicked 1");
        if (evt.getClickCount() == 2) {

            m_ReturnProduct = (ItemsInfo) jListItems.getSelectedValue();
            if (m_ReturnProduct != null) {
                buttonTransition(m_ReturnProduct);
            }
        }
    }   
4

1 に答える 1

2

Windows 8 タブレットの MultiClickInterval が低いようです。

次の行でその値を取得できます: Toolkit.getDefaultToolkit().getDesktopProperty("awt.multiClickInterval")

私の回避策は、Timer と TimerTask を使用して独自の MultiClickInterval をコーディングすることです。

Map<java.awt.Component, Integer>各 のクリック数を保持する静的が必要ですComponent

public static final Map<java.awt.Component, Integer> MULTI_CLICK_MAP = new HashMap<java.awt.Component, Integer>();

また、java.util.Timer

private Timer timer = new Timer();

メソッドで、コンポーネントのカウンターを増やします。2 の場合、コードを実行します。TimerTask は、定義された時間が経過するとカウンターをリセットします。

メソッドは次のようになります。

private void jListItemsMouseClicked(java.awt.event.MouseEvent evt) { 
    Component comp = evt.getComponent();

    //added the component to the map or increase the counter
    if(MULTI_CLICK_MAP.containsKey(comp)) {
        MULTI_CLICK_MAP.put(comp, 1);
    } else {
        int oldCounter = MULTI_CLICK_MAP.get(comp);

        MULTI_CLICK_MAP.put(comp, oldCounter + 1);
    }

    //check for double click
    if (MULTI_CLICK_MAP.get(comp) == 2) {
        MULTI_CLICK_MAP.remove(comp);

        //here is your logic
        m_ReturnProduct = (ItemsInfo) jListItems.getSelectedValue();
        if (m_ReturnProduct != null) {
            buttonTransition(m_ReturnProduct);
        }
    } 
    else {

        //start the TimerTask that resets the counter. this will reset after 1 second (1000 milliseconds)
        this.timer.schedule(new ClickReseter(comp), 1000);
    }

} 

ClickReset は単純な TimerTask で、Component

public class ClickReseter extends TimerTask {

    private Component component;

    public ClickReseter(Component component)
    {
        this.component = component;
    }

    @Override
    public void run()
    {
        MULTI_CLICK_MAP.remove(component);

    }

}

これがうまくいくことを願っています。それはそれをテストしませんでした!ご不明な点がございましたら、お気軽にお問い合わせください。

于 2013-09-05T11:33:38.800 に答える