17

我想要一个具有大小和定义位置的 JPanel。在 JPanel 内部,我水平插入了一定数量的元素(按钮)。因为我的 JPanel 有一个定义的宽度,所以如果我添加很多按钮,我就看不到它。在这种情况下,我需要这个 JPanel 的滚动条。但是这个 JPanel 必须是 JFrame 内某个位置的某个大小。JPanel 的滚动条水平放置在其下方。有人可以帮助我吗?我试过没有成功!

4

3 回答 3

20

使用 JScrollPane 并将其 preferredSize 强制为给定大小(或将 scrollPane 容器 LayoutManager 设置为 null 并在滚动窗格上调用 setBounds())。还要设置滚动条策略。这是其中的一个小示例:

import java.awt.Dimension;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;

public class Test {

    public static void main(String... args) {
        JFrame frame = new JFrame();
        JPanel panel = new JPanel();
        for (int i = 0; i < 10; i++) {
            panel.add(new JButton("Hello-" + i));
        }
        JScrollPane scrollPane = new JScrollPane(panel);
        scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
        scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_NEVER);
        scrollPane.setBounds(50, 30, 300, 50);
        JPanel contentPane = new JPanel(null);
        contentPane.setPreferredSize(new Dimension(500, 400));
        contentPane.add(scrollPane);
        frame.setContentPane(contentPane);
        frame.pack();
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        frame.setVisible(true);
    }
}
于 2012-04-27T07:40:32.053 回答
6

将所有按钮添加到您的面板。然后将此面板添加到滚动窗格。

panel.add(button1);
panel.add(button2);
panel.add(button3);
.
.
.
panel.add(buttonn);

在面板中添加按钮后,将面板添加到滚动窗格。

JScrollPane panelPane = new JScrollPane(panel);

然后将此面板添加到您的框架中。

于 2012-04-27T07:34:01.717 回答
4

以下是一些可能的解决方案:

或者

  • 滚动到决定PointRectangle存在方法,scrollRectToVisible例如myPanel.scrollRectToVisible(myButton.getBounds());
于 2012-04-27T07:47:16.213 回答