我对JPanel和JFrame还是个新手,可能没有按照我应该的方式使用它们。我正在尝试创建Pong游戏,在创建JFrame并将JPanel添加到它之后,我可以调整JPanel的大小,但我不知道如何调整JFrame的大小以适应它。Game类扩展了JPanel。
主:
public static void main(String[] args) throws InterruptedException {
int height = 500, width =(int) (height*1.56); //height = 500, width = 780;
JFrame frame = new JFrame("Pong");
Game game = new Game();
frame.add(game);
frame.setVisible(true);
game.setSize(width, height);
System.out.println(game.getHeight());
System.out.println(game.getWidth());
game.setBackground(Color.BLACK);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
System.out.println(frame.getHeight());
System.out.println(frame.getWidth());
}
500
780
39
136
500
780
*above* 500
*above* 780
编辑:
public static void main(String[] args) throws InterruptedException {
int height = 500, width =(int) (height*1.56); //height = 500, width = 780;
JFrame frame = new JFrame("Pong");
Game game = new Game();
frame.add(game);
frame.setVisible(true);
game.setPreferredSize(new Dimension(width, height));
frame.pack();
System.out.println(game.getHeight());
System.out.println(game.getWidth());
game.setBackground(Color.BLACK);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
System.out.println(frame.getHeight());
System.out.println(frame.getWidth());
}
将setSize更改为setPreferredSize,然后为JFrame调用pack()就可以解决所有问题。
同样,处理首选的大小,并确保在添加组件后在您的JFrame上调用pack()
。此外,重写getPreferredSize比调用setPreferredSize
更好。例如:
import java.awt.Dimension;
import javax.swing.*;
public class Game extends JPanel {
private static final int PREF_W = 400;
private static final int PREF_H = 300;
private int prefW;
private int prefH;
public Game(int prefW, int prefH) {
this.prefW = prefW;
this.prefH = prefH;
}
public Game() {
this(PREF_W, PREF_H);
}
@Override
public Dimension getPreferredSize() {
if (isPreferredSizeSet()) {
return super.getPreferredSize();
}
return new Dimension(prefW, prefH);
}
private static void createAndShowGui() {
int height = 500;
int width =(int) (height*1.56); //height = 500, width = 780;
Game game = new Game(width, height);
JFrame frame = new JFrame("Game");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.getContentPane().add(game);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
System.out.println("Frame size: " + frame.getSize());
System.out.println("game size: " + game.getSize());
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> createAndShowGui());
}
}
下面是“DisplayImage”自定义面板相关部分的代码:
我制作了一个包含三个jpanel的jframe,这三个panel将jframe分成三个相等的部分。每一个面板都包含一个图像。我想调整图像和面板的大小,当帧的大小从高到低的时候。有人能告诉我如何做吗。
我正在尝试使图片适合JLabel。我希望将图片尺寸缩小到更适合我的Swing JPanel的尺寸。 我尝试使用setPreferredSize,但它不起作用。 我在想有没有一个简单的方法来做这件事?我应该为此缩放图像吗?
问题内容: 我是Java的新手,开始学习挥杆技巧,并且在JFrame中调整JPanel的大小时遇到问题。我正在关注本教程: http://vincentramdhanie.blogspot.com/2009/11/cardlayout-with- netbeans.html 因为最终我将学习每种不同的布局,并且现在已经进入CardLayout。在上面,有一个JPanel用于状态面板。那也是我想
我是Java新手,开始学习swing,在JFrame中调整JPanel的大小时遇到问题。我将学习本教程: http://vincentramdhanie.blogspot.com/2009/11/cardlayout-with-netbeans.html 因为最终我正在学习每一种不同的布局,现在我来到了CardLayout。在上面,有一个JPanel用于状态面板。这也是我想要做的,但是当我将一个J
我试图通过反复更改上的图标来创建一个动画(旋转文本)。问题是这些图像的大小不相同,当它们大于第一个图像的大小时,它们就会被裁剪。 解决这一问题的一种方法是为设置PreferredSize以便所有图像都适合--但我想一定有一种方法可以直接调整包含的的大小? 在下面的代码中,我还尝试将全部删除,创建一个新的jlabel,然后添加新的jlabel,但效果是一样的。 整个面板将在一个applet中使用。