Есть функция, которую можно заменить на paint()
и repaint()
в java.Что является альтернативой функции Paint и repaint?
У меня есть сценарий.
Треугольник (Треугольник 1). когда пользователь щелкнет в треугольнике, появится другой треугольник (Треугольник 2) и 1 (Треугольник 1) будет удален с экрана. (кодируется с использованием JFrame
, paint()
и repaint()
)
Я достиг этого до сих пор. но проблема заключается в том, когда я минимизирую или изменяю размер окна с помощью мыши в окне вывода, он просто краска снова Треугольник 1, а не Треугольник 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 ограничивается тем, что у вас будут волосы. – MadProgrammer
Рабочий код обновляется, пожалуйста, взгляните еще раз. Спасибо –
Я не могу это сделать. Нет альтернативы методам 'paint()' или 'repaint()', и они не являются эквивалентами или альтернативами друг другу. – EJP