gpt4 book ai didi

java - 从数组到 JPanel 的绘制点

转载 作者:行者123 更新时间:2023-12-01 21:54:41 25 4
gpt4 key购买 nike

我正在尝试编写一个简单的 GUI 应用程序,允许用户单击面板,BlackPanel在这种情况下,画一个点。而不是将这些点保存到文件中。以及从文件加载点并显示它们的能力。

我已经成功制作了保存和加载ArrayList<Point>所需的所有函数和方法。来自文件并确保加载的点包含需要重新绘制的坐标

我的问题是我无法创建一个绘制数组中所有点的方法

我的主要类(class)是 JFrame其中有两个JPanel添加到其中:

  • MainPanel里面装着一些东西
  • BlackPanel用于绘画。

我的类(class)有一个ArrayList - 作为类(class)成员的积分。

所有 Point 对象均使用 java.awt.Point 制作.

    private void paintPoint(Graphics g, Point p) {
g.setColor(Color.white);
g.fillOval(p.x, p.y, 5, 5);
} // this one is used to create a single dot called by MouseClicked event - works

private void paintPoints(Graphics g, ArrayList<Point> points) {
g.setColor(Color.white);
for (Point point : points) {
g.fillOval(point.x, point.y, 5, 5);
}
} // this one is called by LoadPointsDialog() which in turn is called by a button action

private void loadPointsDialog() {
FileDialog fd = new FileDialog(this, "Open XML file", FileDialog.LOAD);
fd.setDirectory("C:\\");
fd.setFile("*.xml");
fd.setFilenameFilter((File dir, String name) -> name.endsWith(".xml"));
fd.setVisible(true);
String folder = fd.getDirectory();
String fileName = fd.getFile();
ArrayList<Point> aux;
try { // irrelevent for this question. works.
aux = XMLio.read(folder+fileName);
} catch (IOException e) {
System.err.println("Error! Failed reading from file");
return;
}
ItemClear.doClick(); // clears points class member and calls BlackPanel.updateUI();
points.addAll(aux); // works 100% i checked to see if the points exist.
paintPoints(PanelBlack.getGraphics(), points);
}

private void ItemOpenActionPerformed(java.awt.event.ActionEvent evt) {
loadPointsDialog();
}

private void PanelBlackMouseClicked(java.awt.event.MouseEvent evt) {
Point p = evt.getPoint();
paintPoint(PanelBlack.getGraphics(), p);
savePoint(p); // points.add(p);
}

private void ItemClearActionPerformed(java.awt.event.ActionEvent evt) {
PanelBlack.updateUI();
points.clear();
}

我正在使用 NetBeans 设计器工具来创建此 JFrame。

编辑:@Berger 的解决方案

我创建了一个新的嵌套类:

public class PaintPanel extends JPanel {

@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.white);
for (Point point : points) {
g.fillOval(point.x, point.y, 5, 5);
}
}
}

并定义PanelBlack成为此类的对象。

然后我打了repaint()加载新的点数组后 - 就像魔术一样。

最佳答案

您必须重写 PanelBlackpaintComponent(Graphics) 方法。

getGraphics() 进行绘画并不可靠,paintComponent(Graphics) 是您应该自定义绘画的地方。

Painting in Swing

关于java - 从数组到 JPanel 的绘制点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34543791/

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