如何在java中设置JPanel的大小

我的java代码中有一个JPanel,我想设置它的大小,我使用了JPanel.setSize(500,500); 和JPanel.setSize(new Dimension(500,500)); 但两者都不起作用。 请告诉我如何设置JPanel的大小?

大多数Swing布局管理器都尊重组件的preferredSize而不是它的大小。 您可以调用setPreferredSize(new Dimension(500, 500)) ,但这可以在代码中稍后重写,并且可能导致GUI不灵活。 最好覆盖JPanel的getPreferredSize()方法并返回在所有情况下都最佳的计算Dimension。

例如:

 import java.awt.Color; import java.awt.Dimension; import java.awt.GradientPaint; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.RenderingHints; import javax.swing.*; public class PrefSizePanel extends JPanel { private static final int PREF_W = 500; private static final int PREF_H = PREF_W; public Dimension getPreferredSize() { // update as per Marco: if (super.isPreferredSizeSet()) { return super.getPreferredSize(); } return new Dimension(PREF_W, PREF_H); } // just for fun @Override protected void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D g2 = (Graphics2D) g; g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g2.setPaint(new GradientPaint(0, 0, Color.red, 20, 20, Color.blue, true)); g2.fillOval(0, 0, 2 * getWidth(), 2 * getHeight()); } private static void createAndShowGUI() { PrefSizePanel paintEg = new PrefSizePanel(); JFrame frame = new JFrame("PrefSizePanel"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.getContentPane().add(paintEg); frame.pack(); frame.setLocationRelativeTo(null); frame.setVisible(true); } public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { public void run() { createAndShowGUI(); } }); } } 

显示为

在此处输入图像描述