gpt4 book ai didi

Java——如何设置 JScrollPane 的键盘滚动速度

转载 作者:行者123 更新时间:2023-11-30 05:56:49 26 4
gpt4 key购买 nike

JPanel 有一个 JScrollPane,其中包含另一个或两个 JPanel。我的生活取决于使用键盘的方向箭头提高滚动速度。经过仔细考虑,决定的权力: sc.getVerticalScrollBar().setUnitIncrement(240); 应该只适用于鼠标,这是一个巧妙的策略,旨在引起 java 开发人员的小烦恼。有什么办法可以提高滚动速度吗?我的生命悬而未决。

最佳答案

您必须使用 InputMap.put 的组合和 ActionMap.put捕获 JScrollPane 上包含的组件的键盘事件,并在 JScrollPane 获得焦点时处理键盘事件。由于滚动的默认增量值为 1,因此您应该将所需的增量值添加或减去 JScrollPane 的滚动条的当前值,您可以使用 JScrollPane.getVerticalScrollBar().getValue( ) 并使用 JScrollPane.getVerticalScrollBar().setValue(int) 设置。

可以使用以下代码完成使用 JScrollPane 捕获所包含元素的事件的示例,我已经使用按钮完成了,但您明白了(很抱歉代码的组织不好):

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Test
{
public static void main(String[] args)
{
final JFrame f = new JFrame("");
JPanel panel = new JPanel();
panel.setLayout(new GridLayout(2000,1));


for(int i = 0; i != 2000; i++)
{
JButton btn = new JButton("Button 2");
panel.add(btn);
}
final JScrollPane sPane = new JScrollPane(panel);
final int increment = 5000;
sPane.getVerticalScrollBar().setUnitIncrement(increment);

KeyStroke kUp = KeyStroke.getKeyStroke(KeyEvent.VK_UP, 0);
KeyStroke kDown = KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, 0);

sPane.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(kUp,"actionWhenKeyUp");
sPane.getActionMap().put("actionWhenKeyUp",
new AbstractAction("keyUpAction")
{
public void actionPerformed(ActionEvent e)
{
final JScrollBar bar = sPane.getVerticalScrollBar();
int currentValue = bar.getValue();
bar.setValue(currentValue - increment);
}
}
);

sPane.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(kDown,"actionWhenKeyDown");
sPane.getActionMap().put("actionWhenKeyDown",
new AbstractAction("keyDownAction")
{
public void actionPerformed(ActionEvent e)
{
final JScrollBar bar = sPane.getVerticalScrollBar();
int currentValue = bar.getValue();
bar.setValue(currentValue + increment);
}
}
);
f.add(sPane);
f.pack();



SwingUtilities.invokeLater(
new Runnable()
{
public void run()
{
f.setVisible(true);
}
}
);
}
}

我们注册监听并处理该事件:

sPane.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(kUp,"actionWhenKeyUp");
sPane.getActionMap().put("actionWhenKeyUp",
new AbstractAction("keyUpAction")
{
public void actionPerformed(ActionEvent e)
{
final JScrollBar bar = sPane.getVerticalScrollBar();
int currentValue = bar.getValue();
bar.setValue(currentValue - increment);
}
}
);

执行 JScrollBar 值递增的关键代码是 AbstractAction 的代码(在本例中,当用户按下向上键时)。

        public void actionPerformed(ActionEvent e)
{
final JScrollBar bar = sPane.getVerticalScrollBar();
int currentValue = bar.getValue();
bar.setValue(currentValue - increment);
}

您应该做的是当您的 JScrollPane 获得焦点时完成事件,但这应该是微不足道的。

希望它有助于挽救您的生命:P或至少为您提供一个起点。

关于Java——如何设置 JScrollPane 的键盘滚动速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6604133/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com