蛋皮 2013-10-14 15:32 采纳率: 0%
浏览 1002

java.swt 视图,坐标

已知很多点的坐标,用java把点显示出来,并且重复越多的点显示的颜色越深

  • 写回答

1条回答 默认 最新

  • ChatGPTᴼᴾᴱᴺᴬᴵ 2023-03-24 19:26
    关注

    该回答引用ChatGPT-3.5

    要在Java中显示坐标点,可以使用SWT(Standard Widget Toolkit)视图。SWT是一个Java图形界面库,它提供了创建本地GUI控件的API,可以与操作系统的本地GUI库进行交互。


    以下是一个简单的Java SWT代码示例,可以绘制点并且根据点出现的频率设置点的颜色深度。代码示例中使用的是SWT的Canvas类,它是一个可绘制的画布控件,可以在上面绘制图形:

    import java.util.*;
    import org.eclipse.swt.*;
    import org.eclipse.swt.events.PaintEvent;
    import org.eclipse.swt.events.PaintListener;
    import org.eclipse.swt.graphics.Color;
    import org.eclipse.swt.graphics.GC;
    import org.eclipse.swt.graphics.Point;
    import org.eclipse.swt.layout.FillLayout;
    import org.eclipse.swt.widgets.Canvas;
    import org.eclipse.swt.widgets.Display;
    import org.eclipse.swt.widgets.Shell;
    
    public class PointFrequencyColor {
    
        public static void main(String[] args) {
            Display display = new Display();
            Shell shell = new Shell(display);
            shell.setLayout(new FillLayout());
    
            Canvas canvas = new Canvas(shell, SWT.NONE);
    
            List<Point> points = Arrays.asList(
                    new Point(100, 100),
                    new Point(150, 150),
                    new Point(200, 200),
                    new Point(150, 150),
                    new Point(150, 150),
                    new Point(250, 250),
                    new Point(200, 200),
                    new Point(250, 250),
                    new Point(200, 200)
            );
    
            canvas.addPaintListener(new PaintListener() {
                @Override
                public void paintControl(PaintEvent e) {
                    Map<Point, Integer> pointFrequency = new HashMap<>();
                    for (Point p : points) {
                        pointFrequency.put(p, pointFrequency.getOrDefault(p, 0) + 1);
                    }
                    int maxFrequency = pointFrequency.values().stream().max(Integer::compareTo).orElse(0);
    
                    GC gc = e.gc;
                    for (Map.Entry<Point, Integer> entry : pointFrequency.entrySet()) {
                        Point p = entry.getKey();
                        int frequency = entry.getValue();
                        double colorFactor = (double) frequency / maxFrequency;
                        int colorIntensity = (int) (colorFactor * 255);
                        Color color = new Color(display, colorIntensity, colorIntensity, colorIntensity);
                        gc.setForeground(color);
                        gc.drawPoint(p.x, p.y);
                        color.dispose();
                    }
                }
            });
    
            shell.open();
            while (!shell.isDisposed()) {
                if (!display.readAndDispatch()) {
                    display.sleep();
                }
            }
            display.dispose();
        }
    }
    

    代码中定义了一个包含一些点坐标的List,然后使用一个HashMap来记录每个点出现的次数。接着,计算出所有点中出现最多的次数,以便在之后的绘制中计算点颜色深度。在绘制每个点时,先根据点出现的频率计算出颜色深度,然后使用GC类的drawPoint方法来绘制点,并将颜色设置为当前点的颜色。


    运行代码后,会在一个窗口中显示出所有点,并且颜色深度越深的点出现的次数越多。

    评论

报告相同问题?

悬赏问题

  • ¥15 活动选择题。最多可以参加几个项目?
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题
  • ¥20 云服务Linux系统TCP-MSS值修改?
  • ¥20 关于#单片机#的问题:项目:使用模拟iic与ov2640通讯环境:F407问题:读取的ID号总是0xff,自己调了调发现在读从机数据时,SDA线上并未有信号变化(语言-c语言)
  • ¥20 怎么在stm32门禁成品上增加查询记录功能
  • ¥15 Source insight编写代码后使用CCS5.2版本import之后,代码跳到注释行里面
  • ¥50 NT4.0系统 STOP:0X0000007B
  • ¥15 想问一下stata17中这段代码哪里有问题呀
  • ¥15 flink cdc无法实时同步mysql数据