Java JFrame菜单';在JFrame调整大小时,s被画上,图形消失
我是一名高中生,我正在为我的计算机科学课做最后一个项目。我的任务是做一个简单的油漆应用程序,但我有一些问题。其中包括:窗口调整大小时正在擦除的绘制图像,以及我可以在窗口中的菜单上绘制的图像 我相信我是在菜单上画图,因为我使用的是JFrame本身的图形对象。不过,我找不到其他选择。我曾尝试制作单独的组件来绘制,甚至使用BuffereImage,但没有一次成功 这是我的密码:Java JFrame菜单';在JFrame调整大小时,s被画上,图形消失,java,swing,components,jframe,paint,Java,Swing,Components,Jframe,Paint,我是一名高中生,我正在为我的计算机科学课做最后一个项目。我的任务是做一个简单的油漆应用程序,但我有一些问题。其中包括:窗口调整大小时正在擦除的绘制图像,以及我可以在窗口中的菜单上绘制的图像 我相信我是在菜单上画图,因为我使用的是JFrame本身的图形对象。不过,我找不到其他选择。我曾尝试制作单独的组件来绘制,甚至使用BuffereImage,但没有一次成功 这是我的密码: import java.awt.Color; import java.awt.Graphics; import java.a
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import javax.swing.*;
public class Paint implements MouseMotionListener{
private JFrame window;
private drawingComponent pComp;
private int xPos; //xPos of mouse;
private int yPos; //yPos of mouse;
private Color color; // new color
private JTextArea sizeBox;
private int brushShape = 0;
public static void main(String[] args) {
Paint paint = new Paint();
paint.ImplementGUI();
}
public Paint() {
this.pComp = new drawingComponent();
this.window = new JFrame("JPaint");
this.window.setSize(500, 500);
this.window.setVisible(true);
this.window.addMouseMotionListener(this);
this.window.add(this.pComp);
}
public void ImplementGUI() {
JMenuBar menu = new JMenuBar();
JMenu brush = new JMenu("Brush Settings");
JMenu brushShape = new JMenu("Shape");
brush.setSize(100,100);
brush.add(brushShape);
menu.add(brush);
menu.setSize(window.getWidth(), 20);
menu.setVisible(true);
this.sizeBox = new JTextArea("Brush Size:");
this.sizeBox.setText("20");
brush.add(this.sizeBox);
this.window.setJMenuBar(menu);
}
public void mouseDragged(MouseEvent pMouse) {
if (pMouse.isShiftDown() == true) {
this.pComp.paint(this.window.getGraphics(), pMouse.getX(), pMouse.getY(),
window.getBackground(), Integer.parseInt(sizeBox.getText()));
}
else {
this.pComp.paint(this.window.getGraphics(), pMouse.getX(), pMouse.getY(),
color, Integer.parseInt(sizeBox.getText()));
}
}
public void mouseMoved(MouseEvent pMouse) {
}
}
class drawingComponent extends JComponent {
public void paint(Graphics g, int x, int y, Color color, int size) {
g.setColor(color);
g.fillOval(x-(size/2), y-(size/2), size, size); // 10 is subtracted from
// coordinates so the mouse pointer is at the exact middle of the brush.
}
}
如何解决此问题?切勿使用getGraphics()方法进行绘制。正如你所注意到的,这种影响只是暂时的
自定义绘制是通过重写paintComponent()方法而不是paint()方法来完成的
有关如何在面板上绘制多个对象的示例,请参见。camickr是正确的。调整窗口大小时,将重新绘制ImplementGUI组件,因此将调用ImplementGUI.paintComponent()重新绘制组件的整个表面,并且您在mouseDragged()中绘制的内容将丢失