我正在开发一个扩展JDialog的类。我有一个名为&#34的JPanel字段; panel"在它内部,它被添加到contentPane(另一个JPanel),并且我将要显示的组件添加到" panel"。
"面板"始终与窗口本身具有相同的大小。 (它实际上是contentPane的副本。)但是窗口的大小因每次运行而不同,其大小根据来自程序的某些特定字段的值计算在类的构造函数中#39;业务逻辑。 (这个大小在一次运行中是静态的,但是在编写代码时我还不知道确切的数字,只知道如何计算它的方法。)
此尺寸有时可能非常大,但我从不希望我的窗口大于特定尺寸,例如(1300,800)。当窗口不大于此大小时,我不希望滚动条出现。如果它仅在一个维度上大于此值,我只希望显示相应的滚动条(垂直/水平)。如果它在两个维度上都较大,那么两个滚动条都应该出现。
我已经在这里和其他类似论坛上阅读了至少50个关于此主题的教程和问题。我尝试了我发现的每一个想法,我想到的每一个不同的组合。但是他们都没有工作,现在我已经非常绝望了。
这可能是因为我的内容既不是粉笔也不是"小组"使用布局管理器。他们都使用null。我读到另一个问题,我们必须设置我们想要滚动的组件的首选大小,但setPreferredSize依赖于布局管理器。他们写道,除了开始使用布局管理器之外,他们并不知道如何解决这个问题。
但是,如果我开始使用它,它会混淆我设计的布局,它会破坏x,y值,这是我为每个组件手动设置的。布局在我的练习中很重要。如果布局管理器混淆了它,那就不对了,我不喜欢这个练习如何让不同的布局管理器设置布局。
你能否告诉我如何让滚动条保持使用null布局管理器?...:/
这是我的班级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实例的Main类的一部分:
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);
我已经尝试过this.add(scrollpane),contentPane.add(scrollpane),panel.add(scrollpane),scrollpane.add(contentPane)以及许多组合。
我也试过在许多不同的组合中分别创建JScrollBars,但这主要是因为滚动条根本没有出现(我尝试了比我在这里复制的组合更多的组合,例如垂直和水平滚动条策略。)
vertikális = new JScrollBar(JScrollBar.VERTICAL, 0, 10, 0, 100);
vertikális.setPreferredSize(new Dimension(700, 600));
contentPane.add(vertikális);
这也没有任何作用。