我在一个面板上有一个JScrollPane(里面有很多面板),当我用它上面的滚动窗格打开框架时,名气会滚动到底部。无论如何我可以避免这个吗?
以下是一些事实:
滚动条所在的面板包含多个面板。其中一些面板有文本字段。我试图将文本字段的克拉设置为0,这不起作用。
我知道应该有实际的代码,但是当我尝试制作一个模拟窗格(因为我使用的那个与很多代码交织在一起)时,它不会复制问题。
正在滚动的面板是使用循环生成的,该循环生成一系列问题...所以文本框,所述按钮/答案的数量,以及显示金额的文本框和标签每个问题的分数。
我正在滚动的面板的最后一个元素是JTextArea和JLabel。 以下是声明这些内容的代码。
那里有没有人能够至少知道什么会让滚动窗格自动转到底部?
以下是窗格及其内部/外部面板的声明
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);
谢谢!
答案 0 :(得分:4)
我相信在构建GUI时向文本区域添加文本时,滚动窗格将滚动以使文本区域可见。
所以基本上你需要将滚动窗格重置到顶部。
将所有组件添加到滚动窗格后,您可以使用以下代码:
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
scrollPane.getViewport().setViewPosition( new Point(0, 0) );
}
});
invokeLater()将代码添加到事件调度线程(EDT)的末尾,以便在GUI可见后执行。
当然,此代码假定您正在EDT上正确创建其余的GUI。