Вы можете использовать флаг, чтобы узнать, отображается ли строка или нет.
Как я уже говорил, вам нужно построить графический интерфейс в направлении JPanel
с, а не JFrame
с.Также переопределяет 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
}
}
}
![enter image description here](https://i.stack.imgur.com/13LMv.png)
Я не могу опубликовать GIF прямо сейчас, но сама программа работает.Между прочим, приведенный выше код называется Минимальный, полный и проверяемый пример , и на ваших следующих вопросах вам предлагается опубликовать его, чтобы получить конкретные, более быстрые и лучшие ответы на ваши вопросы.