【发布时间】:2015-02-27 08:21:09
【问题描述】:
在java中有没有可以用paint()和repaint()替换的函数。
我有一个场景。
有一个三角形(三角形1)。当用户点击三角形时,另一个三角形 (Triangle 2) 将出现,第一个 (Triangle 1) 将从屏幕上移除。 (使用JFrame、paint() 和repaint() 编码)
到目前为止,我已经实现了。但问题是当我用鼠标最小化或更改窗口大小时,它只是再次绘制 Triangle 1 而不是 Triangle 2。 或如果我调用g2d.clearRect(0, 0, 1000, 1000);,则清除整个屏幕
triangle.reset();
注意:这两个功能都是删除前一个三角形(三角形1)。
是否有任何函数在最小化或窗口大小更改时不应更改状态?
或者我们可以根据场景覆盖repaint() 或任何有帮助的东西。
这是工作代码。执行它,单击三角形然后最小化并再次查看。您会更清楚地了解问题。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Triangle_shape extends JFrame implements ActionListener {
public static JButton btnSubmit = new JButton("Submit");
public Triangle_shape() {
}
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
frame.setLayout(new BorderLayout());
frame.add(new TrianglePanel(), BorderLayout.CENTER);
frame.add(btnSubmit, BorderLayout.PAGE_END);
frame.pack();
frame.repaint();
frame.setTitle("A Test Frame");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
throw new UnsupportedOperationException("Not supported yet.");
}
public static class TrianglePanel extends JPanel implements MouseListener {
private Polygon triangle, triangle2;
public TrianglePanel() {
//Create triangle
triangle = new Polygon();
triangle.addPoint(400, 550); //left
triangle.addPoint(600, 550); //right
triangle.addPoint(500, 350); //top
//Add mouse Listener
addMouseListener(this);
//Set size to make sure that the whole triangle is shown
setPreferredSize(new Dimension(300, 300));
}
/**
* Draws the triangle as this frame's painting
*/
@Override
public void paintComponent(Graphics g) {
Graphics2D g2d = (Graphics2D) g;
g2d.draw(triangle);
}
//Required methods for MouseListener, though the only one you care about is click
public void mousePressed(MouseEvent e) {
}
public void mouseReleased(MouseEvent e) {
}
public void mouseEntered(MouseEvent e) {
}
public void mouseExited(MouseEvent e) {
}
/**
* Called whenever the mouse clicks. Could be replaced with setting the
* value of a JLabel, etc.
*/
public void mouseClicked(MouseEvent e) {
Graphics2D g2d = (Graphics2D) this.getGraphics();
Point p = e.getPoint();
if (triangle.contains(p)) {
System.out.println("1");
g2d.clearRect(0, 0, 1000, 1000);
triangle.reset();
g2d.setColor(Color.MAGENTA);
triangle2 = new Polygon();
triangle2.addPoint(600, 550); // left
triangle2.addPoint(700, 350); //top
triangle2.addPoint(800, 550); //right
g2d.draw(triangle2);
} else {
System.out.println("Triangle dont have point");
}
}
}
}
【问题讨论】:
-
简短的回答是否定的,不要尝试。在 API 范围内工作,你就会有头发。
-
工作代码已更新,请再次查看谢谢
-
我无法确定这一点。
paint()或repaint()方法没有替代品,它们也不是等价物或替代品。
标签: java swing graphics jframe awt