PaintComponent没有绘制任何东西

时间:2018-01-22 16:36:13

标签: java swing jpanel paintcomponent

public checkersView()
{
    super("Checkers");
    Content content=new Content();
    setContentPane(content);
    this.pack();
    this.repaint();
    checkersBoard boardOfChecks=new checkersBoard();
    add(boardOfChecks);
    Dimension screensize = Toolkit.getDefaultToolkit().getScreenSize();
    this.setLocation( (screensize.width - this.getWidth())/2,
            (screensize.height - this.getHeight())/2 );
    this.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
    this.setResizable(false);
    this.setVisible(true);
}`public class Content extends JPanel{
    Content() {
        setBackground(Color.BLACK);
        setLayout(null);
        setPreferredSize( new Dimension(400,300) );
        resignButton = new JButton("Resign");
        newGameButton = new JButton("New Game");
        message = new JLabel("",JLabel.CENTER);
        message.setFont(new  Font("Serif", Font.BOLD, 14));
        message.setForeground(Color.green);
        newGameButton.setBounds(210, 60, 120, 30);
        resignButton.setBounds(210, 120, 120, 30);
        message.setBounds(0, 200, 350, 30);
        add(newGameButton);
        add(resignButton);
        add(message);
    }
}`public class checkersBoard extends JPanel{

public void paintComponent(Graphics g) {...}`

在我的main函数中运行后,结果如下: 应该绘制checkersboard的函数PaintComponent从未使用过......

ss

编辑:因为它似乎不太清楚,所有这些类都是CheckersView的内部类

1 个答案:

答案 0 :(得分:1)

首先,类名应以大写字母开头。遵循Java约定并保持一致。

Swing旨在与布局管理器一起使用。布局管理器将确定添加到面板的组件的大小和位置。

默认情况下,Swing组件的大小为(0,0)。因为您使用的是null而没有正确设置大小,所以无需绘制任何内容。

因此,使用布局管理器,您将不会遇到此问题。

另外,请阅读Custom Painting上的Swing教程中的部分。这些示例将说明如何覆盖面板的getPreferredSize()方法,使组件与布局管理器一起正常工作。