Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JPanel滚动标签赢得';不出现_Java_Swing_Jpanel_Jscrollpane - Fatal编程技术网

Java JPanel滚动标签赢得';不出现

Java JPanel滚动标签赢得';不出现,java,swing,jpanel,jscrollpane,Java,Swing,Jpanel,Jscrollpane,我创建了一个带有JScrollPane的JPanel,并尝试使用它在随机生成的颜色中滚动。随机生成的彩色方块的大小为64px 64px,覆盖面积为100 X 100方块。因此,很自然,我会期望,由于面积远远超过JPanel的面积,滚动条将执行。但是从下面的屏幕截图来看,没有滚动条标签,滚动条无法正常工作 (JPanel) _scrollPane=新的JScrollPane(此) 添加到滚动窗格中的任何组件都将控制滚动条。当添加到滚动窗格的组件的首选大小大于滚动窗格的大小时,将显示滚动条。因此,

我创建了一个带有JScrollPane的JPanel,并尝试使用它在随机生成的颜色中滚动。随机生成的彩色方块的大小为64px 64px,覆盖面积为100 X 100方块。因此,很自然,我会期望,由于面积远远超过JPanel的面积,滚动条将执行。但是从下面的屏幕截图来看,没有滚动条标签,滚动条无法正常工作

(JPanel)

_scrollPane=新的JScrollPane(此)


添加到滚动窗格中的任何组件都将控制滚动条。当添加到滚动窗格的组件的首选大小大于滚动窗格的大小时,将显示滚动条。因此,无论“this”组件是什么,都需要重写
getPreferredSize()
方法来返回组件的大小,因为我可以告诉您,您正在进行自定义绘制,每个组件都负责确定自己的首选大小。

使用@Reimeus中的一个,我得到了相同的结果。代码已更新。y如何确定“此”的大小?鉴于您似乎正在使用null布局服务器,我建议您不了解组件大小实际上是如何变化的calculated@MadProgrammer如果这是您的意思,我不会尝试滚动我的JFrame,因为我的jscrollpane/jpanel独立于它,是的,框架布局是空的。但是你是不是建议我在JFrame中添加一个布局,可能还有一个内部布局?我更关心的是它如何影响某物的放置位置,以及它是否保留了我想要的形状和位置用于“this”的组件是一个JPanel。似乎很多人错过了我输入的部分(扩展JPanel)。但是关于getPreferredSize()的说法是对的。
private void createCanvasWindow()
{
    this.setLayout(new BorderLayout());

    _scrollPane = new JScrollPane(this);
    _scrollPane.setViewportView(this);
    _scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
    _scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
    _scrollPane.setBounds(10, 10, WIDTH, HEIGHT);

    _gen = new JButton("Gen");
    _gen.addActionListener(this);
    _gen.setBounds(16 + WIDTH, 10 + HEIGHT, 80, 32);
    _gen.setVisible(true);

    _frame.getContentPane().add(_gen);
    _frame.getContentPane().add(_scrollPane, BorderLayout.CENTER);
}