在Windows 8平板电脑中运行Java应用程序双击不起作用

时间:2013-09-05 06:45:21

标签: java windows

我已经创建了一个适用于Windows7操作系统桌面的java应用程序。 我试图在Windows 8环境下运行该程序。我使用的设备是平板电脑。 java应用程序已安装并确实运行。但问题在于双击。该程序具有类似双击和项目选择的功能。 但在平板电脑中,你必须双击那一个。但双击该项目将无济于事。它只会在第一次点击时突出显示,但是当双击它时,什么也没有。 Windows 8平板电脑中有关此问题的问题可能是什么。 这与Windows 8中的java有关吗?

非常感谢任何想法。感谢

[UPDATE:] 事件代码:

    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);
            }
        }
    }   

1 个答案:

答案 0 :(得分: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);

    }

}

我希望这对你有用。它没有测试它!如果您有任何疑问,请随时提出。