java 用于任意按钮的JScrollPane

ou6hu8tu  于 2023-01-04  发布在  Java
关注(0)|答案(1)|浏览(97)

在这个网站上,我找到了一个很好的例子,如何应用JScrollPane的JButton矩阵。代码如下所示。

JFrame f = new JFrame();
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        int x = 10;
        int y = 5;
        JPanel panel = new JPanel();
        panel.setLayout(new GridLayout(x, y));
        for (int i = 0; i < x * y; i++) {
            JButton button = new JButton(String.valueOf(i));
            button.setPreferredSize(new Dimension(100, 20));
            panel.add(button);
        }
        JPanel container = new JPanel(new FlowLayout(FlowLayout.CENTER, 0, 0));
        container.add(panel);
        JScrollPane scrollPane = new JScrollPane(container);
        f.getContentPane().add(scrollPane);

        f.pack();
        f.setLocationRelativeTo(null);
        f.setVisible(true);

如果我想让我的按钮具有任意大小和任意位置,并且具有相同的滚动可能性,我该如何修改代码呢?非常感谢您的提示或建议。

我已经修改了上面的代码,试图按照图片所示的方式塑造按钮,但setBounds设置似乎被忽略了。

JFrame f = new JFrame();
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        int x = 10;
        int y = 5;
        JPanel panel = new JPanel();
        panel.setLayout(new GridLayout(x, y));

        JButton button1 = new JButton("JButton1");
        JButton button2 = new JButton("JButton2");
        JButton button3 = new JButton("JButton3");
        JButton button4 = new JButton("JButton4");

        button1.setBounds(0, 0, 100, 50);
        button2.setBounds(100, 25, 100, 25);
        button3.setBounds(0, 50, 80, 200);
        button4.setBounds(80, 50, 250, 60);

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

        JPanel container = new JPanel(new 
        FlowLayout(FlowLayout.CENTER, 0, 0));
        container.add(panel);
        JScrollPane scrollPane = new JScrollPane(container);
        f.getContentPane().add(scrollPane);

        f.pack();
        f.setLocationRelativeTo(null);
        f.setVisible(true);

错误的结果:

我还需要做哪些更改才能使按钮位置符合预期?

pcww981p

pcww981p1#

这和另一个问题没什么不同:您将包含所有JButton的JPanel放入JScrollPane的视区中。就是这样。关键是包含按钮的JPanel将使用什么布局管理器。具体细节很重要,因为这些面板和布局将确定包含的jpanel的首选大小,该jpanel将是滚动窗格视区的视图。
你的问题的细节将取决于你放置的不规则按钮的确切细节,一些你还没有告诉我们的事情。

相关问题