Java에서 paint()
및 repaint()
으로 바꿀 수있는 기능이 있습니까?페인트 및 페인트 다시 칠하기 기능은 무엇입니까?
시나리오가 있습니다.
삼각형 (삼각형 1)이 있습니다. 사용자가 삼각형을 클릭하면 다른 삼각형 (삼각형 2)이 표시되고 (삼각형 1)이 화면에서 제거됩니다. (JFrame
, paint()
및 repaint()
을 사용하여 코딩 됨)
나는 그것을 지금까지 달성했다. 하지만 문제는 마우스를 사용하여 창 크기를 최소화하거나 변경하면 출력 창이 다시 그려집니다. 트라이앵글 1 트라이앵글 2이 아닌 트라이앵글 1입니다. 또는 지우기 내가 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 내에서 작업하면 머리카락이 생깁니다. – MadProgrammer
작업 코드가 업데이트되었습니다. 다시 보시기 바랍니다. 감사합니다. –
나는이 머리 나 꼬리를 만들 수 없습니다. 'paint()'또는'repaint()'메소드에 대한 대안은 없으며, 이것들은 서로 동등하거나 대체 할 수 없습니다. – EJP