向JScrollPane添加组件具有奇怪的行为

时间:2016-06-10 00:42:56

标签: java swing jscrollpane

执行此代码会产生非常奇怪的行为。 在运行时,请尝试调整大小并输入以查看我的意思。

import java.awt.BorderLayout;
import javax.swing.*;

public class FrameWithScrollPanel extends JFrame {
public static void main(String[] args) {
    FrameWithScrollPanel myFrame = new FrameWithScrollPanel();
}


public FrameWithScrollPanel()
{
    this.setDefaultCloseOperation(EXIT_ON_CLOSE);
    JTextArea textArea1 = new JTextArea(5, 30);
    JTextArea textArea2 = new JTextArea(5, 30);

    JPanel jPanel = new JPanel();
    jPanel.setSize(400,400);
    jPanel.setLayout(new BorderLayout());
    jPanel.add(textArea1, BorderLayout.NORTH);
    jPanel.add(textArea2, BorderLayout.SOUTH);

    JScrollPane scrollPane = new JScrollPane();
    scrollPane.add(jPanel);
    getContentPane().add(scrollPane, BorderLayout.CENTER);
    pack();
    setVisible(true);
}
}

现在,替换这两行:

    JScrollPane scrollPane = new JScrollPane();
    scrollPane.add(jPanel);

使用这一行并且行为符合预期。

    JScrollPane scrollPane = new JScrollPane(jPanel);

根据文档,JScrollPane构造函数接受一个Component,add()也是如此。 为什么行为不同?

1 个答案:

答案 0 :(得分:3)

这是错误的:

CREATE TABLE QTEMP. TEST AS (SELECT * FROM EMOQRYLIB.BAIMTHP WHERE TAG = '50K')

由于您正在使用此添加替换JScrollPane的所有重要视口,因此无法正常运行。您应该根据JScrollPane tutorialJScrollPane API将此添加到JScrollPane的视口中:

scrollPane.add(jPanel);

scrollPane.setViewportView(jPanel);

故事的道德:如有疑问,请阅读文档。

请注意,如果将jPanel传递给JScrollPane的构造函数,

scrollPane.getViewport().add(jPanel);

它会自动将组件放入视口中。

根据API:

  

public JScrollPane(Component view)
  创建一个显示指定组件内容的JScrollPane,只要组件的内容大于视图,就会出现水平和垂直滚动条。
  参数:
  view - 要在滚动窗格的视口中显示的组件