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

标签 java swing netbeans jpanel layout-manager

我正在使用 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/

相关文章:

java - 实现OSC监听器和消息修饰符

java - 创建一个可以转换不同类列表的函数

java - 无法使用 Log4j2 在控制台中记录消息,但它们已记录在文件中

java - 如何在 jpopupmenu 中捕获用户对 jradiobutton 的选择?

java - Web 应用程序项目 netbeans 和 glassfish 部署错误

java - Titan + Tinkerpop 读取速度极慢

java - 如何从虚拟数字键盘中获取小数点?

java - 如何捕获 javas-swing 应用程序中文本区域中的 jar 文件发出的控制台输出

netbeans - 在 Netbeans 中搜索和替换宏

java - Netbeans 8.2 所有项目均已损坏,未找到 JDK