gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 02:05:57 25 4
gpt4 key购买 nike

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

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

enter image description here

我现在无法发布 GIF,但程序本身可以运行。顺便说一句,上面的代码被称为 Minimal, Complete and Verifiable Example对于您的下一个问题,我们鼓励您发布一个问题,以便您的问题得到具体、更快、更好的答案。

关于java - 使用paint(Graphics p)时删除java中的一行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50801887/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com