gpt4 book ai didi

java - 使用 JFrame/JPanel/Netbeans 自定义图形位置

转载 作者:行者123 更新时间:2023-12-04 05:56:52 27 4
gpt4 key购买 nike

我正在使用 Netbeans 的图形 GUI 创建界面,我有兴​​趣创建一个 300 x 300 的正方形,其中有一个小圆点指示该正方形内的位置。 JPanel 似乎是一个很好的起点,它为我提供了指定绘制点位置所需的坐标;但我不知道如何在我正在使用的框架内创建这样一个可移动的点。

我知道一种解决方案是关闭布局管理器,但这似乎不是一个很好的解决方案。我感谢任何有用资源的指导或链接:-)

最佳答案

可能是这个

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.geom.*;
import java.util.ArrayList;

public class PathIteratorTest {
public static void main(String[] args) {
JFrame frame = new JFrame("FlatteningPathIterator test");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Shape s=new Ellipse2D.Float(10,10,200,100);
PaintPanel app = new PaintPanel(s);
JScrollPane scroll = new JScrollPane(app);
frame.getContentPane().add(scroll);

frame.setSize(400, 300);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}

static class PaintPanel extends JPanel {
FlatteningPathIterator iter;
ArrayList<Point> points;
int index=0;
public PaintPanel(Shape s) {
iter=new FlatteningPathIterator(s.getPathIterator(new AffineTransform()), 1);
points=new ArrayList<Point>();
float[] coords=new float[6];
while (!iter.isDone()) {
iter.currentSegment(coords);
int x=(int)coords[0];
int y=(int)coords[1];
points.add(new Point(x,y));
iter.next();
}
Timer timer=new Timer(50, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
index++;
if (index>=points.size()) {
index=0;
}
repaint();
}
});
timer.start();
}
protected void paintComponent(Graphics g) {
super.paintComponent(g);

g.setColor(Color.blue);
Point p=points.get(index);
g.fillOval(p.x, p.y, 5,5);
}
}
}

关于java - 使用 JFrame/JPanel/Netbeans 自定义图形位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9408977/

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