Java 向JPanel添加图形时遇到问题
我已经在网上看过了,但是我仍然无法理解如何向JPanel添加图形 以下是我的panel类的代码:Java 向JPanel添加图形时遇到问题,java,swing,jpanel,layout-manager,java-2d,Java,Swing,Jpanel,Layout Manager,Java 2d,我已经在网上看过了,但是我仍然无法理解如何向JPanel添加图形 以下是我的panel类的代码: public class GamePanel extends JPanel { public GamePanel(){ } public void paintComponent(Graphics g) { g.drawString("asd", 5, 5); } } 我的主要方法是: public static void main(Stri
public class GamePanel extends JPanel {
public GamePanel(){
}
public void paintComponent(Graphics g) {
g.drawString("asd", 5, 5);
}
}
我的主要方法是:
public static void main(String[] args) {
frame.setLayout(new FlowLayout());
frame.getContentPane().setBackground(Color.WHITE);
//i is an instance of GamePanel
frame.add(i);
frame.setPreferredSize(new Dimension(500, 500));
frame.pack();
frame.setVisible(true);
}
文本只会出现在屏幕的极小部分(这适用于我试图绘制的任何图形对象)。我做错了什么?
FlowLayout
尊重组件的首选尺寸。因此,覆盖getPreferredSize
以给JPanel
一个可见的尺寸,而不是面板当前在JFrame\pack
之后的默认零尺寸标注:
class GamePanel extends JPanel {
public void paintComponent(Graphics g) {
super.paintComponent(g); // added to paint child components
g.drawString("asd", 5, 20);
}
@Override
public Dimension getPreferredSize() {
return new Dimension(400, 300);
}
}
编辑:
要消除JPanel
与其包含的JFrame
之间的间隙,请将垂直间隙设置为0
:
frame.setLayout(new FlowLayout(FlowLayout.CENTER, 0, 0));
FlowLayout
尊重组件的首选尺寸。因此,覆盖getPreferredSize
以给JPanel
一个可见的尺寸,而不是面板当前在JFrame\pack
之后的默认零尺寸标注:
class GamePanel extends JPanel {
public void paintComponent(Graphics g) {
super.paintComponent(g); // added to paint child components
g.drawString("asd", 5, 20);
}
@Override
public Dimension getPreferredSize() {
return new Dimension(400, 300);
}
}
编辑:
要消除JPanel
与其包含的JFrame
之间的间隙,请将垂直间隙设置为0
:
frame.setLayout(new FlowLayout(FlowLayout.CENTER, 0, 0));
两件事跳出来了
FlowLayout
将使用此信息来决定如何最好地布局面板。由于大小为0x0,重绘管理器将忽略它。尝试重写getPreferredSize
方法并返回适当的大小,或者使用不使用首选大小的布局管理器,如BorderLayout
paintComponent
方法必须调用super.paintComponet
FlowLayout
将使用此信息来决定如何最好地布局面板。由于大小为0x0,重绘管理器将忽略它。尝试重写getPreferredSize
方法并返回适当的大小,或者使用不使用首选大小的布局管理器,如BorderLayout
paintComponent
方法必须调用super.paintComponet
非常感谢!还有一个问题,当我尝试在0,0处绘制一个矩形时,当矩形正确地从x坐标0开始时,y坐标似乎比0高一点点(屏幕顶部和矩形之间有一点间隙)。这正常吗?如果是,我能解决这个问题吗?编辑:我的面板和框架尺寸相同,所有这些都是
FlowLayout
使用的默认间隙。使用零尺寸垂直间隙来纠正此问题。看到了吗!还有一个问题,当我尝试在0,0处绘制一个矩形时,当矩形正确地从x坐标0开始时,y坐标似乎比0高一点点(屏幕顶部和矩形之间有一点间隙)。这正常吗?如果是,我能解决这个问题吗?编辑:我的面板和框架尺寸相同,所有这些都是FlowLayout
使用的默认间隙。使用零尺寸垂直间隙来纠正此问题。请参阅更新不要设置顶级容器的大小。而是布局内容&调用pack()
。不要设置顶级容器的大小。而是布局内容&调用pack()
。