如何使用Swing显示ArrayList?

如何解决如何使用Swing显示ArrayList?

我有两个ArrayList实例,其中包含一些数据,我希望通过使用Swing将这些数据显示为框或它们的数据。

最终目标是将两个数组列表显示为路口和道路的一个矩阵。

我有一个同时包含两个对象的对象

    Map map = new Map(10);
    System.out.println(map.calcShortestPath(map.getJunctions().get(4),map.getJunctions().get(0)));

    System.out.println("\n Map #2");
    ArrayList<Junction> junctions = new ArrayList<Junction>();
    junctions.add(new Junction(0,0));
    junctions.add(new Junction(0,3));
    junctions.add(new Junction(4,0));

    ArrayList<Road> roads = new ArrayList<Road>();
    roads.add(new Road(junctions.get(0),junctions.get(1)));
    roads.add(new Road(junctions.get(1),junctions.get(2)));
    roads.add(new Road(junctions.get(2),junctions.get(3)));
    roads.add(new Road(junctions.get(3),junctions.get(0)));
    roads.add(new Road(junctions.get(0),junctions.get(2)));
    map = new Map(junctions,roads);

到目前为止我尝试过的事情:

  • 使用JTable-似乎不是正确的选择。

  • 使用JList-似乎没有用,因为我试图查看与此相关的列表之一 代码:

      JList<Juncion> displayList = new JList<>(junctions.toArray(new String[0]));
      JScrollPane scrollPane = new JScrollPane(displayList);
    
      getContentPane().add(scrollPane);
      setDefaultCloseOperation(EXIT_ON_CLOSE);
      pack();
      setVisible(true);
    

我认为我可以通过使用JList来解决这个问题,但我认为我没有以正确的方式做到这一点。

解决方法

我认为举一个图形显示示例可能很有趣。

这是我创建的GUI。

Graph Display GUI

路口用正方形表示,道路用线表示。

我做的第一件事是创建一个Graph类来容纳一个List的交叉路口和一个List的道路。我不得不猜测Junction类的数字代表什么。我以为它们是X和Y坐标。

一旦创建了Graph类(模型类),就编写了绘图面板,并且paintComponent方法很简单。

这是代码。您需要对其进行修改以显示多个图形。

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class GraphDisplay implements Runnable {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new GraphDisplay());
    }

    private DrawingPanel drawingPanel;

    private Graph graph;

    private JFrame frame;

    public GraphDisplay() {
        this.graph = new Graph();
    }

    @Override
    public void run() {
        frame = new JFrame("Graph Display");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        drawingPanel = new DrawingPanel(graph);
        frame.add(drawingPanel);

        frame.pack();
        frame.setLocationByPlatform(true);
        frame.setVisible(true);
    }

    public class DrawingPanel extends JPanel {

        private static final long serialVersionUID = 1L;

        private Graph graph;

        private Tuple xTuple;
        private Tuple yTuple;

        public DrawingPanel(Graph graph) {
            this.graph = graph;
            this.xTuple = graph.getXRange();
            this.yTuple = graph.getYRange();

            this.setBackground(Color.WHITE);
            this.setPreferredSize(new Dimension(400,400));
        }

        @Override
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);

            int xSpacing = getWidth() / (xTuple.getMaximum() -
                    xTuple.getMinimum() + 2);
            int ySpacing = getHeight() / (yTuple.getMaximum() -
                    yTuple.getMinimum() + 2);

            Graphics2D g2d = (Graphics2D) g;
            g2d.setColor(Color.BLACK);
            g2d.setStroke(new BasicStroke(5f));

            Font font = getFont().deriveFont(16f);
            g2d.setFont(font);

            List<Junction> junctions = graph.getJunctions();
            for (int i = 0; i < junctions.size(); i++) {
                Junction junction = junctions.get(i);
                int x = (junction.getX() + 1) * xSpacing;
                int y = (junction.getY() + 1) * ySpacing;
                g.drawRect(x - 16,y - 16,32,32);
            }

            List<Road> roads = graph.getRoads();
            for (int i = 0; i < roads.size(); i++) {
                Road road = roads.get(i);
                Junction origin = road.getOrigin();
                Junction destination = road.getDestination();

                int x1 = (origin.getX() + 1) * xSpacing;
                int y1 = (origin.getY() + 1) * ySpacing;
                int x2 = (destination.getX() + 1) * xSpacing;
                int y2 = (destination.getY() + 1) * ySpacing;

                g2d.drawLine(x1,y1,x2,y2);
            }
        }

    }

    public class Graph {

        private final List<Junction> junctions;

        private final List<Road> roads;

        public Graph() {
            junctions = new ArrayList<Junction>();
            junctions.add(new Junction(0,0));
            junctions.add(new Junction(0,3));
            junctions.add(new Junction(4,0));

            roads = new ArrayList<Road>();
            roads.add(new Road(junctions.get(0),junctions.get(1)));
            roads.add(new Road(junctions.get(1),junctions.get(2)));
            roads.add(new Road(junctions.get(2),junctions.get(3)));
            roads.add(new Road(junctions.get(3),junctions.get(0)));
            roads.add(new Road(junctions.get(0),junctions.get(2)));
        }

        public List<Junction> getJunctions() {
            return junctions;
        }

        public List<Road> getRoads() {
            return roads;
        }

        public Tuple getXRange() {
            int minimum = junctions.get(0).getX();
            int maximum = minimum;

            for (int i = 1; i < junctions.size(); i++) {
                int x = junctions.get(i).getX();
                minimum = Math.min(minimum,x);
                maximum = Math.max(maximum,x);
            }

            return new Tuple(minimum,maximum);
        }

        public Tuple getYRange() {
            int minimum = junctions.get(0).getY();
            int maximum = minimum;

            for (int i = 1; i < junctions.size(); i++) {
                int y = junctions.get(i).getY();
                minimum = Math.min(minimum,y);
                maximum = Math.max(maximum,y);
            }

            return new Tuple(minimum,maximum);
        }

    }

    public class Road {

        private final Junction origin;
        private final Junction destination;

        public Road(Junction origin,Junction destination) {
            this.origin = origin;
            this.destination = destination;
        }

        public Junction getOrigin() {
            return origin;
        }

        public Junction getDestination() {
            return destination;
        }

    }

    public class Junction {

        private final int x;
        private final int y;

        public Junction(int x,int y) {
            this.x = x;
            this.y = y;
        }

        public int getX() {
            return x;
        }

        public int getY() {
            return y;
        }

    }

    public class Tuple {

        private final int minimum;
        private final int maximum;

        public Tuple(int minimum,int maximum) {
            this.minimum = minimum;
            this.maximum = maximum;
        }

        public int getMinimum() {
            return minimum;
        }

        public int getMaximum() {
            return maximum;
        }

    }

}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 &lt;select id=&quot;xxx&quot;&gt; SELECT di.id, di.name, di.work_type, di.updated... &lt;where&gt; &lt;if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 &lt;property name=&quot;dynamic.classpath&quot; value=&quot;tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-