我在网上看过,但我仍然无法理解如何将图形添加到JPanel
以下是我的小组类的代码:
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);
}
文本只会出现在屏幕的一个非常小的部分(这适用于我尝试绘制的任何图形对象)。我做错了什么?
答案 0 :(得分:2)
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));
答案 1 :(得分:1)
跳出来的两件事
FlowLayout
将使用此信息来决定如何最好地布局面板。因为大小是0x0,重绘管理器将忽略它。尝试覆盖getPreferredSize
方法并返回适当的大小或使用不使用首选大小的布局管理器,例如BorderLayout
paintComponent
方法必须致电super.paintComponet