java - JScrollPane 打开到面板底部

标签 java swing user-interface jpanel jscrollpane

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

相关文章:

java - 如何在java中拆分paint swing方法?

java - 接口(interface)中的选项

java - 使用数组绘制 jFreechart 时出现问题

java - JTabbedPane 的选项卡位置

linux - 命令行 GUI 是如何制作的?

java - org.ksoap2.serialization.SoapObject 无法转换为 org.ksoap2.serialization.SoapPrimitive

java - 使用两个字符java多次分割字符串

java - main将在哪里实现,以便程序在此代码中执行?

delphi - DUnit GUI 测试 : Can I force 'Application' to a different "form"?

user-interface - 如何将Widget注入(inject)自定义子Widget并使用子Widgets迭代索引?