Java 如何在不更改其所在的Jpanel大小的情况下更改Jbuttons的大小?

Java 如何在不更改其所在的Jpanel大小的情况下更改Jbuttons的大小?,java,swing,jpanel,jbutton,layout-manager,Java,Swing,Jpanel,Jbutton,Layout Manager,所以我在屏幕上有两个面板。一个设置为向西,另一个设置为居中以占据屏幕的其余部分。 我遇到的问题是: 当我改变按钮的大小时,它要么也改变面板的大小,要么什么都不做。注释掉的那行就是我要做的。如何在不改变面板大小的情况下使按钮变小 这两个按钮在调整大小方面总是一样的吗?或者,有没有一种方法可以使不同的按钮在不同的大小之间有不同的空间,而不必将它们分配给不同的面板 当我改变按钮的大小时,它要么也改变面板的大小,要么什么都不做 您不需要更改组件的大小。只需让布局管理器调整组件的大小即可 这两个按钮在调

所以我在屏幕上有两个面板。一个设置为向西,另一个设置为居中以占据屏幕的其余部分。 我遇到的问题是:

  • 当我改变按钮的大小时,它要么也改变面板的大小,要么什么都不做。注释掉的那行就是我要做的。如何在不改变面板大小的情况下使按钮变小
  • 这两个按钮在调整大小方面总是一样的吗?或者,有没有一种方法可以使不同的按钮在不同的大小之间有不同的空间,而不必将它们分配给不同的面板

  • 当我改变按钮的大小时,它要么也改变面板的大小,要么什么都不做

    您不需要更改组件的大小。只需让布局管理器调整组件的大小即可

    这两个按钮在调整大小方面总是一样的吗

    这不是必需的。这取决于您使用的布局

    有没有一种方法可以使不同的按钮具有不同的大小和不同的间距,而不必将它们分配给不同的面板

    是的,您可以使用实现它


    您的预期输出是什么?你能贴一张照片吗?
     public MainPanel() {
            super();
    
            this.setLayout(new BorderLayout());
            buttonPanel = new JPanel();
            buttonPanel.setLayout(new GridLayout(5, 1));
            buttonPanel.setBorder(BorderFactory.createLineBorder(Color.BLACK));
            this.add(buttonPanel, BorderLayout.WEST);
    
                    centerPanel = new JPanel();
            centerPanel.setBackground(Color.black);
            centerPanel.setOpaque(true);
            centerPanel.setBorder(BorderFactory.createLineBorder(Color.BLACK));
            this.add(centerPanel, BorderLayout.CENTER);
    
            JButton options = new JButton("Options");
            //options.setPreferredSize(new Dimension(100, 100));
            buttonPanel.add(options);
            options.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    RichardDemo.this.switchPanel(MainPanel.this);
                }
            });     
    
            JButton start = new JButton("Start Game");
            buttonPanel.add(start);
            start.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
    
                }
            });
        }
    }