我有以下对象的“树”:
JPanel
JScrollPane
JPanel
JPanel
JScrollPane
JTextPane
当使用鼠标滚轮在外部JScrollPane上滚动时,遇到一个令人讨厌的问题。一旦鼠标光标触摸到内部JScrollPane,滚动事件似乎就会传递到该JScrollPane中,并且第一个事件不再对其进行处理。这意味着停止滚动“父”
JScrollPane。
是否可以 仅
禁用内部JScrollPane上的鼠标滚轮?甚至更好的是,如果没有要滚动的内容(大多数情况下,文本窗格仅包含1-3行文本),请禁用滚动功能,但是 如果
有更多内容, 则 启用滚动功能?
我也遇到了这个烦人的问题,Sbodd的解决方案对我来说是不可接受的,因为我需要能够在表和JTextAreas中滚动。我希望其行为与浏览器相同,在可滚动控件上的鼠标将滚动该控件,直到控件触底,然后继续滚动父滚动窗格,通常是整个页面的滚动窗格。
本课程将做到这一点。只需使用它代替常规的JScrollPane。希望对您有帮助。
/**
* A JScrollPane that will bubble a mouse wheel scroll event to the parent
* JScrollPane if one exists when this scrollpane either tops out or bottoms out.
*/
public class PDControlScrollPane extends JScrollPane {
public PDControlScrollPane() {
super();
addMouseWheelListener(new PDMouseWheelListener());
}
class PDMouseWheelListener implements MouseWheelListener {
private JScrollBar bar;
private int previousValue = 0;
private JScrollPane parentScrollPane;
private JScrollPane getParentScrollPane() {
if (parentScrollPane == null) {
Component parent = getParent();
while (!(parent instanceof JScrollPane) && parent != null) {
parent = parent.getParent();
}
parentScrollPane = (JScrollPane)parent;
}
return parentScrollPane;
}
public PDMouseWheelListener() {
bar = PDControlScrollPane.this.getVerticalScrollBar();
}
public void mouseWheelMoved(MouseWheelEvent e) {
JScrollPane parent = getParentScrollPane();
if (parent != null) {
/*
* Only dispatch if we have reached top/bottom on previous scroll
*/
if (e.getWheelRotation() < 0) {
if (bar.getValue() == 0 && previousValue == 0) {
parent.dispatchEvent(cloneEvent(e));
}
} else {
if (bar.getValue() == getMax() && previousValue == getMax()) {
parent.dispatchEvent(cloneEvent(e));
}
}
previousValue = bar.getValue();
}
/*
* If parent scrollpane doesn't exist, remove this as a listener.
* We have to defer this till now (vs doing it in constructor)
* because in the constructor this item has no parent yet.
*/
else {
PDControlScrollPane.this.removeMouseWheelListener(this);
}
}
private int getMax() {
return bar.getMaximum() - bar.getVisibleAmount();
}
private MouseWheelEvent cloneEvent(MouseWheelEvent e) {
return new MouseWheelEvent(getParentScrollPane(), e.getID(), e
.getWhen(), e.getModifiers(), 1, 1, e
.getClickCount(), false, e.getScrollType(), e
.getScrollAmount(), e.getWheelRotation());
}
}
}
当我将JTextPane添加到SOUTH位置时,滚动窗格会滚动以显示文本。我不希望滚动窗格从其最上面的位置移动。我怎样才能防止这种情况?
我有一个垂直滚动的JPanel,在该JPanel上有几个JScrollPane,当用户向下滚动面板时,如果用户的鼠标越过JScrollPane,他们就不能再滚动JPanel,他们必须将鼠标从JScrollPane移回面板上。过一段时间就会变得很烦人。
问题内容: 以下类实现了chatGUI。正常运行时,屏幕如下所示: 精美的ChatGUI http://img21.imageshack.us/img21/7177/rightchat.jpg 当我输入较大长度的文本时,问题经常出现。50到100个字符的gui变得疯狂。聊天记录框如下所示缩小 图片http://img99.imageshack.us/img99/6962/errorgui.jpg。
问题内容: 我有这个(包裹在)中,并有个。的内容是简单的HTML,其中包含使用img标签嵌入的某些图片(本地文件)。问题是,当您加载时,需要花一秒钟的时间来加载,然后在页面底部显示滚动条。如果我做: 它会暂时设置滚动条,然后出现另一个主题(大概负责加载图像)并将滚动条打回到底部。我尝试添加: 但这并没有解决。有没有办法从任一得到一个事件或当窗格完成加载,这样我可以设置滚动条,然后会通知我吗?另一种
如何防止带有滚动条和的子div在Firefox中超过其父flexbox的高度?它在Chrome中正常工作。 CodePen链接(如果您喜欢它来堆叠溢出代码段):https://codepen.io/garyapps/pen/ZMNVJg 细节: 我有一个固定高度的柔性容器。它有一个设置,它包含多个垂直堆叠的Childen div。其中一个子div被赋予一个属性,而其他div被赋予固定的高度。 我期