繁体   English   中英

平板电脑触摸屏上的Java Swing反馈按钮

[英]Java Swing feedback button on a tablet touch screen

是否可以从平板电脑上的Java Swing应用程序中的JButton获得反馈?

我正在使用Windows 8,并且如果将物理鼠标切换到设备,则JButton的运动反馈是典型的方式,但是如果使用手指,则反馈会消失。 我尝试了覆盖自定义继承的JButtons和estended等的重写方法,但是我不希望目标...我想这与我们用鼠标触摸屏幕时有关,您只单击屏幕上的一个点即可,但是如果您用手指触摸,则会选择多个像素。

任何想法?

非常感谢!

我不能完全确定您的反馈意思是什么,但我认为您的问题是“否”。 Swing从来没有为这种界面设计。 但是,如果您要引用的反馈类似于单击按钮时突出显示和肿胀之类的现象,则通常这应该是独立发生的。 如果我怀疑您是指触摸时执行了悬停操作,但未“轻按”按钮,则可能无法控制它。 或者,如果您的应用程序还不成熟,则可能需要考虑从swing切换到JavaFX,后者使用CSS来对这样的事情进行大量控制。

我有一个可以接受的解决方案。 我将尽力解释它尽可能简单和完整。

首先,您必须使用像这样的JButton扩展类:

    import java.awt.Color;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseListener;

    import javax.swing.JButton;

    /**
     * Customized <code>JButton</code> to obtained a feedback user experience of movement.
     * @author Gabriel Moreno.
     */
    public class FeedbackTouchScreenButton extends JButton {

        public FeedbackTouchScreenButton() {
            super();

            this.addMouseListener(new MouseListener() {
                @Override
                public void mouseClicked(final MouseEvent e) {
                        new Thread(new Runnable() {
                            @Override
                            public void run() {
                                Color bg = e.getComponent().getBackground();
                                e.getComponent().setBackground(Color.BLUE); // For example
                                try {
                                    Thread.sleep(100);
                                } catch (InterruptedException e1) {
                                    e1.printStackTrace();
                                }
                                e.getComponent().setBackground(bg);
                            }
                        }).start();
                } // mouseClicked()

                @Override
                public void mouseEntered(MouseEvent e) {}
                @Override
                public void mouseExited(MouseEvent e) {}
                @Override
                public void mousePressed(MouseEvent e) {}
                @Override
                public void mouseReleased(MouseEvent e) {}
            });
        } // FeedbackTouchScreenButton()

    } // FeedbackTouchScreenButton

当自定义对相关按钮执行的操作时,您将不得不(小心地)抛出另一个线程。 例如:

    // ---
        btnExample.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(final java.awt.event.ActionEvent evt) {
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        btnExampleActionPerformed(evt);
                    } // run()
                }).start();
            }
        });
    // ---

这个例子显然有效。 但实际上似乎只有... :-)

原因是因为在平板电脑屏幕上,组件的“ onPressed”状态无法像用鼠标指针那样用手指工作。

按键:'onClick'='onPressed'+'onRelease'。

而且“ onClick”是在触摸屏上正确完成的。 这是完成技巧的那一刻,当您从设备上松开手指时。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM