【问题标题】:JPanel scroll tabs won't appearJPanel 滚动选项卡不会出现
【发布时间】:2014-08-06 21:51:40
【问题描述】:

我创建了一个带有 JScrollPane 的 JPanel,并尝试使用它滚动随机生成的颜色。随机生成的彩色方块的大小为 64px X 64px,覆盖面积为 100 X 100 个方块。所以很自然,我希望由于该区域远远超过 JPanel 的区域,滚动条会执行。但从下面的屏幕截图中,滚动条在没有滚动条选项卡的情况下无法正常工作。

(扩展 JPanel)

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);
}

【问题讨论】:

  • 使用these之一
  • @Reimeus 我得到了相同的结果。代码已更新。
  • 如何确定“this”的大小?鉴于您似乎正在使用 null 布局服务器,我建议您不了解组件大小的实际计算方式
  • @MadProgrammer 如果这是您的意思,我不会尝试滚动我的 JFrame,因为我的 jscrollpane/jpanel 独立于它,是的,框架布局为空。但是您是否建议我向我的 JFrame 添加一个布局,并可能添加一个内部布局?我更关心的是它如何影响某物的放置位置以及它是否保留了我想要的形状和位置。
  • _scrollPane = new JScrollPane(this); this(以及this是什么)的大小是如何确定的?

标签: java swing jpanel jscrollpane


【解决方案1】:

_scrollPane = new JScrollPane(this);

您添加到滚动窗格的任何组件都将控制滚动条。当添加到滚动窗格的组件的首选大小大于滚动窗格的大小时,将出现滚动条。因此,无论“this”组件是什么,都需要覆盖 getPreferredSize() 方法以返回组件的大小,因为据我所知,您正在进行自定义绘制,并且每个组件都负责确定自己的首选大小。

【讨论】:

  • “this”的组件是一个 JPanel。似乎很多人错过了我输入的部分(扩展 JPanel)。但你对 getPreferredSize() 的看法是对的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-14
  • 2014-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多