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循环中捕获方法,则不会删除它。从方法返回后是否有某种方法可以保留图形?
答案 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不透明。我在你的代码中插入了一行来做到这一点。