Paint不会添加到JPanel

时间:2014-03-14 10:36:55

标签: java swing layout jpanel repaint

所以我有两个类,一个负责创建JPanel并且还覆盖paint。另一个包含main并使用其他类。为了方便起见,我已经删除了不涉及图形的内容。第一个是JPanel和绘画。第二是主要的。我为任何糟糕的结构或混乱道歉,我相对较新,而且我只是把东西扔进去看看有什么用。油漆中的东西只是一种考验,它不是主要目标。

public class PokerTable extends JPanel {

private static final int WIDTH = 800;
private static final int HEIGHT = WIDTH * 3 / 4;
private static final String NAME = "Test";
private JFrame frame = new JFrame(NAME);

    public PokerTable() {

        //frame.setMinimumSize(new Dimension(WIDTH,HEIGHT));
        //frame.setMaximumSize(new Dimension(WIDTH,HEIGHT));
        frame.setPreferredSize(new Dimension(WIDTH,HEIGHT));
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        frame.pack();
        frame.setResizable(false);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }

    public void paint(Graphics g) {
        super.paint(g);
        Graphics2D g2d = (Graphics2D) g;
        g2d.setBackground(Color.GREEN);
        g2d.setColor(Color.RED);
        g2d.fillOval(0, 0, 30, 30);
    }
}

下一个不仅仅是打电话给PokerTable,但我已经将其他部分留在了外面,因为他们依赖其他课程而只是打印到控制台。

public class Poker{

public static void main(String[]args) {
    System.out.println("hello");
    PokerTable pt = new PokerTable();

    pt.repaint();

} 

并非我一定期望它能够正常运作,我已经将PokerTable的扩展名改为Canvas和JFrame而没有任何运气。

2 个答案:

答案 0 :(得分:2)

您没有将面板添加到框架中,请尝试:

frame.add(this);

在PokerTable构造函数中

答案 1 :(得分:0)

您需要将面板添加到框架,否则面板将永远不会重新绘制。

frame.add(panel) or frame.add(this) 

是您需要根据自己的位置进行调用的方式。

此外,您应该重写paintComponent,而不是直接绘制。这不会导致您的代码失败,但这是不好的做法。