Java2D:为什么赢了';我的JPanel不让我调整它的大小吗?

Java2D:为什么赢了';我的JPanel不让我调整它的大小吗?,java,swing,jframe,jpanel,paintcomponent,Java,Swing,Jframe,Jpanel,Paintcomponent,好的,我正在尝试向JFrame添加一个JPanel,如下所示: gameClasses[2] = new a2(); gameClasses[2].setSize(100, 100); menu.add(gameClasses[2]); menu.setVisible(true); a2()是一个单独的类,充当JPanel,我使用paintComponent为其绘制图像。“菜单”是JFrame。我的

好的,我正在尝试向JFrame添加一个JPanel,如下所示:

            gameClasses[2] = new a2();
            gameClasses[2].setSize(100, 100);
            menu.add(gameClasses[2]);
            menu.setVisible(true);
a2()是一个单独的类,充当JPanel,我使用paintComponent为其绘制图像。“菜单”是JFrame。我的问题是,当我调用“gameClasses[2].setSize(100100);”时,它不会调整JPanel的大小,但大小保持不变。有没有人知道我做错了什么,或者应该怎么做,因为在互联网上似乎没有其他人对此有任何问题。谢谢

编辑:以下是与菜单和a2相关的代码:

            menu.setSize(swidth / 2 + swidth / 5, sheight / 2 + sheight / 5);
            menu.setLocation((swidth - menu.getWidth()) / 2, (sheight -     menu.getHeight()) / 3);
            menu.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            menu.setResizable(true);
            menu.remove(main);
            menu.add(gameClasses[0] = new a3());
            menu.add(gameClasses[1] = new a4());
            gameClasses[2] = new a2();
            gameClasses[2].setSize(100, 100);
            gameClasses[2].validate();
            menu.add(gameClasses[2]);
            menu.setVisible(true);

import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import javax.swing.JPanel;

@SuppressWarnings("serial")
public class a2 extends JPanel {

public static int size = 48;
public static Image grsX = Toolkit.getDefaultToolkit().getImage("tiles/grsX.png");
public static Image grsY = Toolkit.getDefaultToolkit().getImage("tiles/grsY.png");
public static Image grsX1 = Toolkit.getDefaultToolkit().getImage("tiles/grsX1.png");
public static Image grsY1 = Toolkit.getDefaultToolkit().getImage("tiles/grsY1.png");

public a2() {
    System.out.println("a2 loaded...");
}

public void paintComponent(Graphics g) {
    super.paintComponent(g);
    //draw interface
    for(int y = 0; y < a6.ay; y++) {
        for(int x = 0; x < a6.ax; x++) {
            g.drawImage(a5.Tile_Img.get(a5.ID_Tile.get(a6.area[x][y])), x * size, y * size, size, size, this);
            if(x > 0) {
                if(a6.area[x - 1][y].equals("00") && a6.area[x][y].equals("01")) {
                    g.drawImage(grsX, x * size, y * size, size, size, this);
                }
            }
            if(x < a6.ax - 1) {
                if(a6.area[x + 1][y].equals("00") && a6.area[x][y].equals("01")) {
                    g.drawImage(grsX1, x * size, y * size, size, size, this);
                }
            }
            if(y > 0) {
                if(a6.area[x][y - 1].equals("00") && a6.area[x][y].equals("01")) {
                    g.drawImage(grsY, x * size, y * size, size, size, this);
                }
            }
            if(y < a6.ay - 1) {
                if(a6.area[x][y + 1].equals("00") && a6.area[x][y].equals("01")) {
                    g.drawImage(grsY1, x * size, y * size, size, size, this);
                }
            }
        }
    }
    repaint();
}
menu.setSize(swidth/2+swidth/5,sheight/2+sheight/5);
setLocation((swidth-menu.getWidth())/2,(sheight-menu.getHeight())/3);
menu.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
菜单。可设置大小(真);
菜单。删除(主);
menu.add(gameClasses[0]=newA3());
menu.add(gameClasses[1]=newA4());
gameClasses[2]=新a2();
游戏类[2]。设置大小(100100);
gameClasses[2]。验证();
添加(游戏类[2]);
menu.setVisible(true);
导入java.awt.Graphics;
导入java.awt.Image;
导入java.awt.Toolkit;
导入javax.swing.JPanel;
@抑制警告(“串行”)
公共类a2扩展了JPanel{
公共静态int size=48;
公共静态图像grsX=Toolkit.getDefaultToolkit().getImage(“tiles/grsX.png”);
公共静态图像grsY=Toolkit.getDefaultToolkit().getImage(“tiles/grsY.png”);
公共静态图像grsX1=Toolkit.getDefaultToolkit().getImage(“tiles/grsX1.png”);
公共静态图像grsY1=Toolkit.getDefaultToolkit().getImage(“tiles/grsY1.png”);
公共a2(){
System.out.println(“a2加载…”);
}
公共组件(图形g){
超级组件(g);
//绘图界面
对于(int y=0;y0){
如果(a6.面积[x-1][y].等于(“00”)&和a6.面积[x][y].等于(“01”)){
g、 drawImage(grsX,x*大小,y*大小,大小,大小,此);
}
}
如果(x0){
如果(a6.面积[x][y-1]。等于(“00”)&和a6.面积[x][y]。等于(“01”)){
g、 drawImage(grsY,x*尺寸,y*尺寸,尺寸,尺寸,本);
}
}
如果(y
}

a3和a4是一个KeyListener类和一个MouseListener类,它们都扩展了JPanel
  • 布局更可能考虑首选尺寸而不是尺寸
  • 在框架上调用
    pack()
    ,将使其成为显示内部组件所需的最小尺寸。添加所有内容后再调用它
  • 不要调用
    setLayout(null)
    (注释中提到的“非相关”代码)使用布局。

  • 除非您发布所有相关代码,否则不可能知道您的错误所在。或者更好的是,
    gameClasses
    是一个面板,
    菜单
    是一个(名称非常糟糕的)框架吗?这是我的猜测,但由于我不喜欢猜测,我将支持Jeffrey关于发布SSCCE的建议。这是所有相关的代码,除了a2扩展了JPanel并起作用,我对菜单所做的唯一更改是设置布局(null)和设置大小可调(true)“所有相关代码”,如果您知道相关代码是什么,你将完成98%的修复工作。碰巧,
    setLayout(null)
    是问题的核心。不要那样做@MrdR教授泰勒在这种情况下,您使用
    菜单的任何地方
    a2
    的代码都是相关的。但是,您的问题几乎可以肯定是
    null LayoutManager
    的问题。感谢它在某种程度上起作用,但当我在菜单上调用pack()时,它会将菜单更改为100*100,而不是JPanel。。。还有其他建议吗?等等。。nevermind pack()使JFrame变小,但不是我为JPanel设置的大小“还有其他建议吗?”发布一个S-S-C-C-E(而不是大多数无用的代码片段和零碎的信息)我在上面发布和编辑的任何内容都和SSCCE一样好,可以供所有人阅读。@DrDrProfessorTyler先生您发布的内容既不完整,也不可编译。它比不上SSCCE。