使用paint(Graphics p)时在java中删除一行?

我使用以下函数绘制了一条线:

public void paint(Graphics p) { super.paint(p); p.drawLine(600, 200, 580, 250); } 

我想知道有没有办法可以删除这一行?

那么可以在程序的main()方法中调用这个函数吗?

您可以使用标志来了解该行是否正在显示。

正如我之前所说,你需要为JPanel而不是JFrame构建你的GUI。 还重写paintComponent而不是paint方法。

例如,以下程序在您单击JButton时显示一行或隐藏它,使用您自己的条件将该逻辑调整到您自己的程序。

 import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.geom.Line2D; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.SwingUtilities; public class LineDrawer { private JFrame frame; private JButton button; public static void main(String[] args) { SwingUtilities.invokeLater(new LineDrawer()::createAndShowGui); //Put our program on the EDT } private void createAndShowGui() { frame = new JFrame(getClass().getSimpleName()); MyPane pane = new MyPane(); //Create an instance of our custom JPanel class button = new JButton("Hide/Show"); button.addActionListener(e -> { pane.setShowLine(!pane.isShowLine()); //Change the state of the flag to its inverse: true -> false / false -> true }); frame.add(pane); frame.add(button, BorderLayout.SOUTH); frame.pack(); frame.setVisible(true); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } //Our custom class that handles painting. @SuppressWarnings("serial") class MyPane extends JPanel { private boolean showLine; @Override protected void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D g2d = (Graphics2D) g; if (showLine) { //If true, show line g2d.draw(new Line2D.Double(50, 50, 100, 50)); } } @Override public Dimension getPreferredSize() { return new Dimension(300, 300); //For the size of our JPanel } public boolean isShowLine() { return showLine; } public void setShowLine(boolean showLine) { this.showLine = showLine; this.repaint(); //Everytime we set a new state to showLine, repaint to make the changes visible } } } 

在此处输入图像描述

我现在不能发布GIF,但程序本身也可以。 顺便说一句,上面的代码被称为最小,完整和可validation的示例,并且在您接下来的问题上,我们鼓励您发布一个代码,以便获得针对您的问题的具体,更快和更好的答案。