java如何使用空布局管理器在JPanel上添加滚动条?
我正在开发一个扩展JDialog的类。我在其中有一个名为“panel”的JPanel字段,它被添加到contentPane(另一个JPanel),并且我添加了要显示到“panel”的组件
“面板”始终与窗口本身大小相同。(它实际上是contentPane的副本。)但是每次运行窗口的大小都不同,它的大小在类的构造函数中根据来自程序业务逻辑的某些特定字段的值计算。(这个大小在一次运行中是静态的,但在编写代码时,我还不知道确切的数字,只知道如何计算它的方法。)
这个尺寸有时可能非常大,但我从不希望我的窗口大于特定尺寸,例如(1300800)。当窗口不大于此大小时,我不希望出现滚动条。当它仅在一维上大于此值时,我只希望显示相应的滚动条(垂直/水平)。当它在两个维度上都变大时,两个滚动条都会出现
在这里和其他类似的论坛上,我已经阅读了至少50篇关于这个主题的教程和问题。我尝试了我发现的每一个想法,每一个我只能想到的不同组合。但是没有一个奏效,现在我已经非常绝望了
这可能是因为我的contentPane和“panel”都没有使用布局管理器。它们都使用null。我通过另一个问题了解到,我们必须设置想要滚动的组件的首选大小,但是setPreferredSize依赖于布局管理器。他们在那里写道,除了开始使用布局管理器,他们真的不知道如何解决这个问题
但是如果我开始使用一个,它会混淆我设计的布局,它会破坏x,y值,这是我通过每个组件手动设置的。布局在我的练习中很重要。如果布局管理器混淆了它,这是不对的,我真的不喜欢在这个练习中,不同的布局管理器如何设置布局
您能告诉我如何使用null layout manager使滚动条正常工作吗?…:/
这是我的课程Kimenet(Kimenet在我的母语中是“输出”的意思):
public class Kimenet extends JDialog {
private JPanel contentPane, panel;
private int window_width, window_height;
public static Kimenet showDialog(...) {...}
public Kimenet(...){
window_width = ...; //some counting here
window_height = ...; //some counting here
GUI();
}
private void GUI(){
setBounds(0, 0, window_width, window_height);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
contentPane.setLayout(null);
setContentPane(contentPane);
panel = new JPanel();
panel.setLayout(null);
panel.setBounds(0, 0, window_width, window_height);
contentPane.add(panel);
//here is where I try to add the scrollbars in every desperate way......
... components that I wanna add: panel.add(component);
}
下面是我制作Kimenet实例的主类的一部分:
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Kimenet dialog = Kimenet.showDialog();
dialog.setDefaultCloseOperation(JDialog.HIDE_ON_CLOSE);
dialog.setModal(true);
dialog.setVisible(true);
System.exit(0);
} catch (Exception e) {
e.printStackTrace();
}
}
});
在使对话框可见之前,我尝试过从Main添加滚动条,也尝试过从Kimenet的GUI()方法添加滚动条
我尝试过以多种不同的组合创建JScrollPane,但这主要导致滚动条仍然没有出现,但我添加到“panel”的每个组件都消失了
panel.setPreferredSize(new Dimension(1000, 600));
JScrollPane scrollpane = new JScrollPane(panel);
panel.setAutoscrolls(true);
scrollpane.setPreferredSize(new Dimension(800, 300));
this.add(scrollpane);
我试过这个。添加(滚动窗格)、内容窗格。添加(滚动窗格),面板。添加(滚动窗格),滚动窗格。添加(contentPane)和许多组合
我也尝试过在许多不同的组合中分别创建JScrollBars,但这主要导致滚动条根本没有出现(我尝试了比我在这里复制的更多的组合,例如垂直和水平滚动条策略)
vertikális = new JScrollBar(JScrollBar.VERTICAL, 0, 10, 0, 100);
vertikális.setPreferredSize(new Dimension(700, 600));
contentPane.add(vertikális);
这也不管用
共 (0) 个答案