如何使用null布局管理器在JPanel上添加滚动条?

时间:2014-10-23 23:11:22

标签: java swing jpanel jscrollpane null-layout-manager

我正在开发一个扩展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);

这也没有任何作用。

0 个答案:

没有答案