Java 滚动JPanel

Java 滚动JPanel,java,swing,scroll,jpanel,Java,Swing,Scroll,Jpanel,我想要一个有大小和位置的JPanel。在JPanel中,我水平插入了一定数量的元素(按钮)。因为我的JPanel有一个定义的宽度,如果我添加了很多按钮,我就看不到了。在这种情况下,我需要一个用于此JPanel的滚动条。但是这个JPanel必须在JFrame中的特定位置具有特定的大小。JPanel的滚动条已水平放置在其下方。有人能帮我吗?我试过了,但没有成功 将所有按钮添加到面板中。然后将此面板添加到滚动窗格 panel.add(button1); panel.add(button2); pane

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

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

panel.add(button1);
panel.add(button2);
panel.add(button3);
.
.
.
panel.add(buttonn);
JScrollPane panelPane = new JScrollPane(panel);
在面板中添加按钮后,将面板添加到滚动窗格

panel.add(button1);
panel.add(button2);
panel.add(button3);
.
.
.
panel.add(buttonn);
JScrollPane panelPane = new JScrollPane(panel);

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

使用JScrollPane并将其首选大小强制为给定大小(或将scrollPane容器LayoutManager设置为null并在scrollPane上调用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);
    }
}
导入java.awt.Dimension;
导入javax.swing.JButton;
导入javax.swing.JFrame;
导入javax.swing.JPanel;
导入javax.swing.JScrollPane;
公开课考试{
公共静态void main(字符串…参数){
JFrame=新JFrame();
JPanel面板=新的JPanel();
对于(int i=0;i<10;i++){
panel.add(新的JButton(“Hello-”+i));
}
JScrollPane scrollPane=新的JScrollPane(面板);
scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HorizontalScrollBar,根据需要);
scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL\u SCROLLBAR\u NEVER);
滚动窗格.立根(50,30,300,50);
JPanel contentPane=新的JPanel(null);
setPreferredSize(新维度(500400));
添加(滚动窗格);
frame.setContentPane(contentPane);
frame.pack();
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.setVisible(true);
}
}

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

  • 对于滚动到决策点
    矩形
    存在方法
    scrollRectToVisible
    ,例如
    myPanel.scrollRectToVisible(myButton.getBounds())

对不起,我需要JPanel零件的尺寸和位置确定。还有,滚动条的方向:)对不起,英语有点差
determinate
means?Arr是可能的,如果发布一个关于我编写的需求的小示例?Emm,问题是我需要将JPanel定位在JFrame的特定位置。此外,它必须有一个确定的大小。@BrallaGuilar您可以使用LayoutManager来定位和调整组件的大小,或者将LayoutManager设置为null并调用setBounds()来定位和调整组件的大小。在这种情况下,你必须在JScrollPaneCan上这样做,你能帮我举个例子吗?@Brallanguilar我编辑了我的帖子,展示了如何强制JScrollPaneExcellent的位置和大小!谢谢你,我的朋友。好吧,重点是因为你的
JPanel
有一个
定义的宽度/高度/大小
,所以一旦你添加任何超出其大小的东西,你就看不到那东西,即使添加了
JScrollPane
,因为即使
JScrollPane
也不能超过
JPanel
的大小,因此这些组件总是隐藏的:(.因为如果你不定义它的大小,那么组件首先被添加到
JPanel
,然后它的
preferredSize()
doLayout()隐式确定)排序的东西,因此你的<代码> JScRunPANG在这种情况下工作,但不在这里。也考虑或A。没有一个明确了某个大小和某个位置的含义,这个问题不能以现在的形式回答。