Java - 从方法返回后删除的图形

时间:2015-10-29 19:52:13

标签: java graphics

public void graph()
{
    // Build the panel
    JFrame graphWindow = new JFrame();
    JPanel graphPanel = new JPanel();
    Graphics g;
    graphWindow.setTitle(inputField.getText());
    graphWindow.getContentPane().add(graphPanel,"Center");
    graphPanel.setBackground(Color.white);
    graphWindow.setSize(600, 600);
    graphWindow.setLocation(200,300);
    graphWindow.setVisible(true);

    g = graphPanel.getGraphics();
    graphPanel.addMouseListener(this);
    g.setFont(new Font("Times Roman", Font.BOLD, 20));
    g.drawString("Test",100,100);
}

我的问题是当我的程序从方法返回时,绘图被删除,我留下一个空白的白色窗口。如果我在while循环中捕获方法,则不会删除它。从方法返回后是否有某种方法可以保留图形?

2 个答案:

答案 0 :(得分:2)

制作JFrame。让它可见。把JPanel放进去吧。覆盖JPanel中的paintComponent以绘制您想要绘制的内容。

例如:

JPanel panel = new JPanel() {
    @Override
    protected void paintComponent(Graphics g) {
        // drawing code using g
    }
};
JFrame frame = new JFrame();
frame.setContentPane(panel);
frame.setSize(600, 600);
frame.setLocation(200,300);
frame.setVisible(true);

答案 1 :(得分:-1)

一旦JPanel调用它的paintComponent方法,它就会用面板的默认外观替换你的绘图。相反,使用自定义paintComponent方法创建JPanel(您可以像下面的示例一样创建一个匿名类,或者创建从JPanel扩展的类。)

// Build the panel
JFrame graphWindow = new JFrame();
JPanel graphPanel = new JPanel() {
    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.setFont(new Font("Times Roman", Font.BOLD, 20));
        g.drawString("Test", 100, 100);
    }
};
graphWindow.setTitle("Blabla");
graphWindow.getContentPane().add(graphPanel, "Center");
graphPanel.setBackground(Color.white);
graphPanel.setOpaque(true); // make the JPanel opaque
graphWindow.setSize(600, 600);
graphWindow.setLocation(200, 300);
graphWindow.setVisible(true);

另外,我注意到你想要一个白色的背景。你必须让你的JPanel不透明。我在你的代码中插入了一行来做到这一点。