我在面板上有一个 JScrollPane(里面有很多面板),当我打开带有滚动面板的框架时,fame 会滚动到底部。无论如何我可以避免这种情况吗?
以下是一些事实:
滚动条所在的面板包含多个面板。其中一些面板具有文本字段。我试图将文本字段的克拉设置为 0,但这没有用。
我知道应该有实际代码,但当我尝试制作一个模拟 Pane 时(因为我使用的是与大量代码交织在一起的)它没有复制问题。
正在滚动的面板是使用生成一系列问题的循环生成的...所以一个文本框、所述数量的按钮/答案,以及一个显示数量的文本框和标签每个问题的分数。
正在滚动的面板的最后一个元素是 JTextArea 和 JLabel。 下面是声明这些的代码。
有没有人至少可以抛出一个想法,让滚动 Pane 自动转到底部?
这是 Pane 及其内部/外部面板的声明
JPanel newPanel = new JPanel(new BorderLayout(0, 0));
JPanel showPanel = new JPanel();
BoxLayout layout = new BoxLayout(showQuizPanel, BoxLayout.Y_AXIS);
showQuizPanel.setLayout(layout);
buttonPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT));
buttonPanel.setBackground(Color.white);
newPanel.setBackground(Color.white);
showPanel.setBackground(Color.white);
populateButtonPanel();
populateShowPanel(showPanel, buttonPanel);
populateQuestions(showPanel);
JScrollPane scrollPane = new JScrollPane(showPanel, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
scrollPane.getViewport().setBackground(Color.WHITE);
scrollPane.setAlignmentX(JScrollPane.CENTER_ALIGNMENT);
scrollPane.getVerticalScrollBar().setUnitIncrement(16);
scrollPane.getVerticalScrollBar().setValue(0);
scrollPane.getViewport().setViewPosition(new Point(0,0));
newPanel.add(scrollPane, BorderLayout.CENTER);
return newPanel;
声明页面上最后一个元素的代码
JPanel pPanel = new JPanel(new FlowLayout(FlowLayout.CENTER));
pPanel.setBackground(Color.WHITE);
pPanel.add(qValue);
pPanel.add(new JLabel("Points"));
qArea.add(pPanel);
qArea.add(Box.createVerticalStrut(50));
qValue.setCaretPosition(0);
谢谢!
最佳答案
我相信当您在构建 GUI 时向文本区域添加文本时,滚动 Pane 将滚动以使文本区域可见。
所以基本上您需要将滚动 Pane 重置到顶部。
将所有组件添加到滚动 Pane 后,您可以使用如下代码:
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
scrollPane.getViewport().setViewPosition( new Point(0, 0) );
}
});
invokeLater() 将代码添加到事件调度线程 (EDT) 的末尾,以便它在 GUI 可见后执行。
当然,此代码假定您正在 EDT 上正确创建 GUI 的其余部分。
关于java - JScrollPane 打开到面板底部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20389795/