蛋皮 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 我这模型写的不对吗?为什么lingo解出来的下面影子价格这一溜少一个变量
  • ¥50 树莓派安卓APK系统签名
  • ¥15 maple软件,用solve求反函数出现rootof,怎么办?
  • ¥65 汇编语言除法溢出问题
  • ¥15 Visual Studio问题
  • ¥20 求一个html代码,有偿
  • ¥100 关于使用MATLAB中copularnd函数的问题
  • ¥20 在虚拟机的pycharm上
  • ¥15 jupyterthemes 设置完毕后没有效果
  • ¥15 matlab图像高斯低通滤波