执行此代码会产生非常奇怪的行为。 在运行时,请尝试调整大小并输入以查看我的意思。
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()也是如此。 为什么行为不同?
答案 0 :(得分:3)
这是错误的:
CREATE TABLE QTEMP. TEST AS (SELECT * FROM EMOQRYLIB.BAIMTHP WHERE TAG = '50K')
由于您正在使用此添加替换JScrollPane的所有重要视口,因此无法正常运行。您应该根据JScrollPane tutorial和JScrollPane API将此添加到JScrollPane的视口中:
scrollPane.add(jPanel);
或
scrollPane.setViewportView(jPanel);
故事的道德:如有疑问,请阅读文档。
请注意,如果将jPanel传递给JScrollPane的构造函数,
scrollPane.getViewport().add(jPanel);
它会自动将组件放入视口中。
根据API:
public JScrollPane(Component view)
创建一个显示指定组件内容的JScrollPane,只要组件的内容大于视图,就会出现水平和垂直滚动条。
参数:
view - 要在滚动窗格的视口中显示的组件