当前位置: 首页 > 知识库问答 >
问题:

修复JFrame中JPanels的JScrollPane的大小

欧博简
2023-03-14
    package GUI;
    import java.awt.*;
    import javax.swing.*;

    public class MultiPanels {
    private JScrollPane getContent() {
    Dimension d = new Dimension(300,200);
    JPanel panel = new JPanel(new GridBagLayout());
    GridBagConstraints gbc= new GridBagConstraints();
    gbc.weightx = 1.0;
    gbc.fill = GridBagConstraints.HORIZONTAL;


    gbc.gridwidth = GridBagConstraints.REMAINDER;
    panel.add(getPanel(d,  6, Color.red), gbc);
    panel.add(getPanel(d,  4, Color.green.darker()), gbc);
    panel.add(getPanel(d,  4, Color.orange), gbc);
    panel.add(getPanel(d, 12, Color.blue), gbc);
    panel.add(getEmptyPanel(d), gbc);

    return new JScrollPane(panel);
}

private JScrollPane getPanel(Dimension d, int rows, Color color) {
    JPanel panel = new JPanel(new GridBagLayout());
    panel.setBackground(color);
    GridBagConstraints gbc= new GridBagConstraints();
    gbc.insets = new Insets(10,5,10,5);
    gbc.weightx = 1.0;
    for(int i = 0, j = 1; i < rows; i++) {
        gbc.gridwidth = GridBagConstraints.RELATIVE;
        panel.add(new JButton(String.valueOf(j++)), gbc);
        gbc.gridwidth = GridBagConstraints.REMAINDER;
        panel.add(new JButton(String.valueOf(j++)), gbc);
    }
    JScrollPane scrollPane = new JScrollPane(panel);
    scrollPane.setPreferredSize(d);
    return scrollPane;
}

private JScrollPane getEmptyPanel(Dimension d) {
    JPanel panel = new JPanel() {
        protected void paintComponent(Graphics g) {
            int w = getWidth();
            int h = getHeight();
            GradientPaint gp = new GradientPaint(0,0,Color.red,
                                                 0,h,Color.cyan);
            ((Graphics2D)g).setPaint(gp);
            g.fillRect(0,0,w,h);
        }
    };

    panel.setPreferredSize(new Dimension(300,400));
    JScrollPane scrollPane = new JScrollPane(panel);
    scrollPane.setPreferredSize(d);
    return scrollPane;
    }

    public static void main(String[] args) {
    JFrame f = new JFrame();

    JScrollPane jp =  new MultiPanels().getContent();
    jp.setSize(new Dimension(200, 200));
    jp.setMaximumSize(new Dimension(200,200));
    jp.setPreferredSize(new Dimension(200,200));


    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.add(jp);


    f.setSize(400,400);
    f.setLocation(200,200);
    f.setResizable(false);
    f.setVisible(true);
    }
    }

共有1个答案

段干帅
2023-03-14

任何时候东西的大小或排列不正确,你必须查看布局。

通常,多花点时间在:

http://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html

 类似资料:
  • 问题内容: 我有一个带有两个单独的JPanels的JFrame。一个JPanels充满了JButton,而另一个则有几个文本字段。我通过JFrame在按钮上添加了鼠标侦听器,我希望这样做,以便从第一个JPanel触发事件时,第二个JPanel中的文本字段会发生更改。这两个面板有各自的类。我将如何去做呢? 问题答案: 使用MVC,Model-View-Control,关注点分离。 让拥有您的听众的控

  • 我有一个带有两个独立JPanels的JFrame。其中一个JPanels填充了JButtons,而另一个则有几个文本字段。我通过JFrame向按钮添加了鼠标监听器,我想让它在第一个JPanel触发一个事件时,第二个JPanel中的文本字段发生变化。这两个面板有自己的类。我该如何着手做这件事?

  • 我使用子JPanel构造JScrollPane,然后尝试将JScrollPane添加到父JPanel中,希望有一个可滚动的自定义JPanel。 我有一个大的细白线前面的所有我的组件,他们是没有滚动。有什么想法吗?

  • 我正在使用 开发一个 Swing GUI。 有一个 ,其中包含两个 。后来我想在s中显示一些组件,我剪掉了这部分代码,使它更短。 如何将调整为的大小?不起作用,如果没有行设置首选大小,GUI将以最小大小显示。 编辑:我可以更改首选的大小行以适应最大的JPanel,但我提出这个问题是因为我希望< code>JFrame根据< code>JPanel的大小动态调整大小。

  • 问题内容: 我现在有一个发送HTTP请求的SwingWorker,并且我重写了SwingWorker的done()方法来更改JFrame中的内容。我想基本上删除所有内容,并根据服务器返回的值在JFrame上添加一个新的成员面板。 现在,我面临的问题是,当我在JFrame上调用以下方法时,它不会从JFrame中删除任何内容,也不会更改它在Frame中包含的内容。 我当前的修复方法如下,但我宁愿更改J

  • 问题内容: 我有一个,其内容窗格为。为此,我添加了较小的,并且如预期的那样,如果添加太多,则会出现一个垂直滚动条。 问题是,我的小s包含一个过了。我想使用鼠标滚轮 仅 用于滚动面板外,而不是较小的滚动窗格。我已经设定到为小滚动面板,但如果我朝任意方向滚动,以及鼠标越过,滚动不工作了。 有什么建议吗? 问题答案: 您可以尝试将滚轮事件从内部滚动窗格转发到其父级。