0

JSpinnerこれは私をかなり混乱させています。私は数値に を使用する小さなアプリケーションを持っています。結果のイベントのとMouseAdapterに応じて値を設定して、それにを追加しました。getScrollAmount()getWheelRotation()

アプリケーションが Linux (Debian Wheezy、Oracle JDK 1.6.0_32) で実行されている限り、すべてが正常に機能しています。つまり、JSpinner にフォーカスがあるときにマウス ホイールをスクロールしても問題なく動作します (GTK LookAndFeel を使用)。

Microsoft Windows でソフトウェアをテストすると、別の動作が明らかにJSpinnerなりました。 はマウス ホイールの動きに反応しません。私はすでにLinux と Windows の両方でLookAndFeel試したので、ここでは問題にはならないようです。MetalLookAndFeel

この JSpinnerMouseWheelEventを両方の OS で s に反応させる方法について何か提案はありますか?

ありがとうございました。

4

1 に答える 1

1

うーん、何が間違っているのかわかりませんが、これはWindows 7で設計されたコードであり、正常に動作するので、あなたのもので試してみて、コードのどこが違うかを確認してください:

import java.awt.Container;
import java.awt.EventQueue;
import java.awt.event.MouseWheelEvent;
import java.awt.event.MouseWheelListener;
import javax.swing.JFrame;
import javax.swing.JSpinner;
import javax.swing.UIManager;
import javax.swing.UIManager.LookAndFeelInfo;

/**
 *
 * @author David
 */
public class JSpinnerMouse extends JFrame {

    private JSpinner jspinner;

    public JSpinnerMouse() {
        createAndShowUI();
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        try {
            for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (Exception e) {
            // If Nimbus is not available, you can set the GUI to another look and feel.
        }
        EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                JSpinnerMouse jSpinnerMouse = new JSpinnerMouse();
            }
        });
    }

    private void createAndShowUI() {
        setTitle("JSpinner using mouse wheel");
        setSize(300, 300);
        setResizable(false);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
        addComponentsToContentPane(getContentPane());
        addListeners();
        setVisible(true);
    }

    private void addComponentsToContentPane(Container contentPane) {
        jspinner = new JSpinner();
        contentPane.add(jspinner);
    }

    private void addListeners() {
        this.addMouseWheelListener(new MouseWheelListener() {

            @Override
            public void mouseWheelMoved(MouseWheelEvent mwe) {
                if (MouseWheelEvent.WHEEL_UNIT_SCROLL == mwe.getScrollType()) {
                    int value = (int) jspinner.getValue();
                    if (mwe.getWheelRotation() == -1) {//up
                        jspinner.setValue(value + 1);
                    } else {//down
                        jspinner.setValue(value - 1);
                    }
                }
            }
        });
    }
}

また、あなたが使用していると言ったように、MouseWheelEvent に getDirection() メソッドが見つからなかったので、方向に応じて正または負の値を返す getUnitsToScroll() を使用しました。たぶん、これが問題の原因です。MouseWheelEvent クラスのどこで getDirection() メソッドを見つけましたか?

于 2012-06-15T23:29:50.503 に答える