我得到了以下代码,这是我所遇到的实际问题的缩短版本:
import javax.swing.*;
import java.awt.*;
public class Circle {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
JFrame frame = new JFrame();
Painter panel = new Painter();
frame.getContentPane().setLayout(new BorderLayout());
frame.getContentPane().add(panel, BorderLayout.CENTER);
frame.pack();
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
import javax.swing.*;
import java.awt.*;
public class Painter extends JPanel{
/**
*
*/
private static final long serialVersionUID = 5663520834139683160L;
/**
* @param args
*/
Painter()
{
}
public void drawPlayer(Graphics g)
{
g.setColor(Color.GREEN);
g.fillOval(0, 0, 200, 30);
//g.setColor(Color.GREEN);
//g.drawRect(0, 0, 80, 50);
//g.setColor(Color.BLUE);
//g.fillRect(0, 0, 80/2, 50/2);
//g.setColor(Color.BLACK);
//g.drawString("BOB", 10/2+10, 5/2);
}
@Override
public void printComponent(Graphics g)
{
super.paintComponent(g);
this.drawPlayer(g);
}
}
当我执行它时,JPanel没有出现,我只是找不到错误。
不知道这是否重要,但在实际问题中,我在构造函数中使用JPanels初始化JFrame,但它也不起作用。
如有必要,我可以发布原始代码。实际的任务是为ConnectFour游戏提供一个GUI,其中Frame被划分为绘制光盘的JPanel和另一个提供播放器信息(如名称等)的JPanel。第一部分工作正常,但最后一部分不起作用。 (不要被这个代码混淆,我发布了一个圆圈。我想发布解决方案的结构,我正在考虑为玩家信息面板。)
答案 0 :(得分:2)
为什么JPanel不会显示在Frame上?
应该覆盖paintComponent()
方法,而不是printComponent()
方法
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
this.drawPlayer(g);
}