我有这样的情况。我有其viewportView是JPanel的滚动窗格,并且该JPanel的布局为BoxLayout。在此面板中,我添加了一个扩展JPanel的类,该类包含JComponents。
因此,在运行应用程序时,JScrollPane中将显示JComponents。这就是我的ScrollPane的形成方式。
这里的问题是,当数据超过大约750行时,滚动条开始出现问题。当通过鼠标滚轮上下滚动时,滚动不会平稳地移动,它突然在中间停止,然后再次开始,说它有一个急促的运动。我的问题是在这种情况下如何获得平滑的鼠标移动。
我的scrollPane是这样的
public JScrollPane getScrollPane() {
if (scrollPane == null) {
scrollPane = new JScrollPane();
scrollPane.setSize(new Dimension(1000, 433));
scrollPane.setLocation(new Point(10, 10));
scrollPane.setColumnHeaderView(getHeaderOfRowPanel());
scrollPane
.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
scrollPane.setViewportView(getScrollPanel());
scrollPane
.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
scrollPane.getVerticalScrollBar().setUnitIncrement(
unitIncrement);
}
return scrollPane;
}
private JPanel getScrollPanel() {
if (scrollPanel == null) {
scrollPanel = new JPanel();
scrollPanel.setBorder(null);
scrollPanel.setLayout(new BoxLayout(getScrollPanel(),
BoxLayout.Y_AXIS));
}
return scrollPanel;
}
private class RowPanel extends JPanel {
//My components are here ..
//I add this Panel in scrollPanel
}
看一下JScrollBar.setUnitIncrement,因为与JPanels
中的一堆JScollPane
相比有不自然的滚动JList
,JTable
或者JTextArea
例
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class JScrollBarUnitIncrement {
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 = 50;
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") {
private static final long serialVersionUID = 1L;
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") {
private static final long serialVersionUID = 1L;
public void actionPerformed(ActionEvent e) {
final JScrollBar bar = sPane.getVerticalScrollBar();
int currentValue = bar.getValue();
bar.setValue(currentValue + increment);
}
});
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add(sPane);
f.pack();
SwingUtilities.invokeLater(new Runnable() {
public void run() {
f.setVisible(true);
}
});
}
private JScrollBarUnitIncrement() {
}
}
问题内容: 我有一个,其内容窗格为。为此,我添加了较小的,并且如预期的那样,如果添加太多,则会出现一个垂直滚动条。 问题是,我的小s包含一个过了。我想使用鼠标滚轮 仅 用于滚动面板外,而不是较小的滚动窗格。我已经设定到为小滚动面板,但如果我朝任意方向滚动,以及鼠标越过,滚动不工作了。 有什么建议吗? 问题答案: 您可以尝试将滚轮事件从内部滚动窗格转发到其父级。
我正在使用添加元素的JscrollPane,当元素超过7个时,JscrollPane中的JScrollBar将被激活。我需要当我引入一个新元素时,滚动条向右移动 构造函数: 滚动条向右移动,但从来没有达到最大值,总是有多一点的距离滚动。 有人知道为什么会这样吗?我看到使用setValue和getMaximum将滚动条向右移动,但对我来说,它停留在靠近右边的地方,而不是右边。 下面是一张截图来看看。
问题内容: 我有以下对象的“树”: 当使用鼠标滚轮在外部JScrollPane上滚动时,遇到一个令人讨厌的问题。一旦鼠标光标触摸到内部JScrollPane,滚动事件似乎就会传递到该JScrollPane中,并且第一个事件不再对其进行处理。这意味着停止滚动“父” JScrollPane。 是否可以 仅 禁用内部JScrollPane上的鼠标滚轮?甚至更好的是,如果没有要滚动的内容(大多数情况下,文
本文向大家介绍swing组件JScrollPane滚动条实例代码,包括了swing组件JScrollPane滚动条实例代码的使用技巧和注意事项,需要的朋友参考一下 本文研究的主要是swing组件之JScrollPane滚动条的实现代码示例,具体如下。 实例1 实例2 效果: 总结 以上就是本文关于swing组件JScrollPane滚动条实例代码的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续
我尝试重新验证()和重新绘制(),但没有改变。 现在有趣的事情来了。如果我用for(int I=0;I 只有当我用另一个我手动填写的列表创建和设置新模型时,我才能查看更新。
我有一个简单的Java Swing程序定义如下: 这个程序由一个简单的JScrollPane组成,里面有多个按钮。仅启用垂直滚动。工作很好。但问题是,当我按住'shift'键时,当我使用鼠标滚轮滚动时,垂直滚动不起作用。垂直滚动只有在我拖动滚动条或放开“Shift”键时才起作用。通常,在JScrollPane中,当按住“Shift”键,使用鼠标滚轮时,它会水平滚动而不是垂直滚动。但是,我已经禁用了