Deleting a line in java when using paint(Graphics p)?

后端 未结 1 648
情话喂你
情话喂你 2021-01-25 22:45

I have drawn a line using the below function:

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

I am wo

相关标签:
1条回答
  • You can use a flag to know whether the line is displaying or not.

    As I said before you need to build your GUI towards JPanels and not JFrames. Also overriding paintComponent and not paint method.

    For example, the following program displays a line or hides it when you click the JButton, adapt that logic to your own program with your own conditions.

    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
            }
        }
    }
    

    I can't post a GIF right now, but the program itself works. Btw the above code is called a Minimal, Complete and Verifiable Example and on your next questions you're encouraged to post one in order to get specific, faster and better answers to your questions.

    0 讨论(0)
提交回复
热议问题