JScrollPane打开到面板的底部

时间:2013-12-05 01:41:55

标签: java swing user-interface jpanel jscrollpane

我在一个面板上有一个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);

谢谢!

1 个答案:

答案 0 :(得分:4)

我相信在构建GUI时向文本区域添加文本时,滚动窗格将滚动以使文本区域可见。

所以基本上你需要将滚动窗格重置到顶部。

将所有组件添加到滚动窗格后,您可以使用以下代码:

SwingUtilities.invokeLater(new Runnable()
{
    public void run()
    {
        scrollPane.getViewport().setViewPosition( new Point(0, 0) );
    }
});

invokeLater()将代码添加到事件调度线程(EDT)的末尾,以便在GUI可见后执行。

当然,此代码假定您正在EDT上正确创建其余的GUI。