首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何创建一个Swing应用程序,将所有输入的值存储到一个字符串中?

如何创建一个Swing应用程序,将所有输入的值存储到一个字符串中?
EN

Stack Overflow用户
提问于 2019-01-26 16:28:36
回答 1查看 64关注 0票数 0

我正在制作一个应用程序,为用户输入的坐标绘制形状。我需要两个输入字段,这两个字段在每次用户点击ENTER时将输入的数字存储到数组中,然后连接坐标来绘制线条。

我寻找了一些swing教程,并且已经看到最好的选择是JFormatedTextField。我设法做了一个lambda方法,当按下ENTER时打印出数值,但我不知道如何在lambda之外使用输入的值,也不能在其中创建数组,因为我得到了一个错误,变量必须为final.so。问题是,如何将输入的值存储到数组中,以及如何让它在每次按ENTER时绘制一条直线?

代码语言:javascript
运行
AI代码解释
复制
 Number[] values = new Number[5];
 for (int i = 0; i< 5;i++) {
    fieldXbox.addActionListener(e -> {
       System.out.println("Handled by Lambda listener");
       Number coordinateX = (Number) fieldXbox.getValue();
       values[i]= coordinateX;
       System.out.println("coordinateX" + coordinateX);
    });

假设x坐标和y坐标各有一个输入域,并且这两个输入域都应该存储在单独的数组中,然后迭代这些数组以绘制连接它们的线。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-26 17:35:12

我将尝试回答您的问题,并通过下面的示例向您展示如何实现这一点。这些是我对您的代码所做的更改。

我使用了JTextField而不是JFormatedTextField,因为JFormatedTextField对于这样一个简单的程序来说太复杂了。

我使用了java.util.List而不是数组,因为List可以动态地改变它的大小。这在这里很有用,因为用户可以添加许多坐标。

我已经编写了Canvas类,这些线就是在这个类上绘制的。

如果有什么不清楚的地方,请在评论中告诉我。

代码语言:javascript
运行
AI代码解释
复制
import javax.swing.*;
import java.awt.*;
import java.util.ArrayList;
import java.util.List;

public class DrawLines {

  public static void main(String[] args) {

    List<Integer> xValues = new ArrayList<>();
    List<Integer> yValues = new ArrayList<>();

    JTextField fieldXbox = new JTextField();
    fieldXbox.addActionListener(e -> {
      System.out.println("Handled by Lambda listener");
      Integer coordinateX = Integer.parseInt(fieldXbox.getText());
      xValues.add(coordinateX);
      System.out.println("coordinateX" + coordinateX);
    });

    JTextField fieldYbox = new JTextField();
    fieldYbox.addActionListener(e -> {
      System.out.println("Handled by Lambda listener");
      Integer coordinateY = Integer.parseInt(fieldYbox.getText());
      yValues.add(coordinateY);
      System.out.println("coordinateY" + coordinateY);
    });

    Canvas canvas = new Canvas(xValues, yValues);
    canvas.setBorder(BorderFactory.createLineBorder(Color.black));

    JButton drawButton = new JButton("Draw");
    drawButton.addActionListener(e -> canvas.repaint());

    JFrame f = new JFrame();
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.getContentPane().setLayout(new GridBagLayout());
    f.getContentPane().add(fieldXbox, new GridBagConstraints(0, 0, 1, 1, 1.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(5, 5, 5, 5), 0, 0));
    f.getContentPane().add(fieldYbox, new GridBagConstraints(1, 0, 1, 1, 1.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(5, 5, 5, 5), 0, 0));
    f.getContentPane().add(drawButton, new GridBagConstraints(2, 0, 1, 1, 0.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 0, 0));
    f.getContentPane().add(canvas, new GridBagConstraints(0, 1, 3, 1, 1.0, 1.0, GridBagConstraints.WEST, GridBagConstraints.BOTH, new Insets(5, 5, 5, 5), 0, 0));
    f.setBounds(300, 200, 500, 400);
    f.setVisible(true);
  }
}

class Canvas extends JPanel {
  private List<Integer> xCoordinates;
  private List<Integer> yCoordinates;

  Canvas(List<Integer> xCoordinates, List<Integer> yCoordinates) {
    this.xCoordinates = xCoordinates;
    this.yCoordinates = yCoordinates;
  }

  @Override
  protected void paintComponent(Graphics g) {
    super.paintComponent(g);
    if (xCoordinates.size() != yCoordinates.size()) {
      throw new IllegalStateException("Difference in number of x coordinates and y coordinates." +
          " xCoordinates=" + xCoordinates + " yCoordinates=" + yCoordinates);
    }

    for (int i = 0; i < xCoordinates.size() - 1; i++) {
      g.drawLine(xCoordinates.get(i), yCoordinates.get(i), xCoordinates.get(i+1), yCoordinates.get(i+1));
    }
    if (!xCoordinates.isEmpty()) {
      g.drawLine(xCoordinates.get(xCoordinates.size() - 1), yCoordinates.get(yCoordinates.size() - 1),
          xCoordinates.get(0), yCoordinates.get(0));
    }
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54380310

复制
相关文章
maven中如何将所有引用的jar包打包到一个jar中
在pom文件的build节点中添加这个插件的引用:  <plugins> <plugin> <artifactId>maven-assembly-plugin</artifactId> <configuration> <archive> <manifest> <!--这里要替换成jar包main方法所在类 --> <mainClass>com.sf.pps.client.IntfClientCall</mainClass>
wuweixiang
2018/09/13
3.8K0
【Groovy】使用 SwingBuilder 构建 Swing 窗口 ( 创建一个 Swing 构造器 | 配置 Swing 窗口的一系列属性 | 设置 Swing 窗口显示 )
在 Groovy 中 , 可以使用 SwingBuilder 构建 Swing 窗口 , 用于在 Gradle 编译时 , 弹出一些窗口界面 ;
韩曙亮
2023/03/30
8950
【Groovy】使用 SwingBuilder 构建 Swing 窗口 ( 创建一个 Swing 构造器 | 配置 Swing 窗口的一系列属性 | 设置 Swing 窗口显示 )
在 Flutter 移动应用程序中创建一个列表
Flutter 是一个流行的开源工具包,它可用于构建跨平台的应用。在文章《用 Flutter 创建移动应用》中,我已经向大家展示了如何在 Linux 中安装 Flutter 并创建你的第一个应用。而这篇文章,我将向你展示如何在你的应用中添加一个列表,点击每一个列表项可以打开一个新的界面。这是移动应用的一种常见设计方法,你可能以前见过的,下面有一个截图,能帮助你对它有一个更直观的了解:
用户1880875
2021/09/06
3.1K0
Maven简单方式将所有依赖打包到一个jar
用如下插件 <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <version>2.6</version> <configuration> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef>
飞奔去旅行
2019/06/13
3.1K0
如何将 starrocks 的 be 的多个存储目录剔除一个?
starrocks 集群的 be 节点的多个存储目录,有一个磁盘空间过小,搭建时误配置上,如下所示:
用户9865966
2022/06/29
8330
uniapp 如何将输入值转成大写
本教程操作环境:windows7 系统、uni-app v3 版本,该方法适用于所有品牌电脑。
CRMEB商城源码
2022/05/24
1.7K0
uniapp 如何将输入值转成大写
Python:将一个 csv 文件转为 json 文件存储到磁盘
我也不是一次编写完成的,是在不断的试错中一步一步的解决这个问题的,令我印象最深刻的就是这个sort函数的用法,需要传入一个回调函数,这里是以列表元素的最后一个值作为key,我之前在做的时候忘记了题目中已经给了总分,还使用了sum([int(j) for j in x[1:]])这个排序,多此一举。
wsuo
2020/07/30
2.3K0
Python:将一个 csv 文件转为 json 文件存储到磁盘
如何快速获取一个网站的所有资源 如何快速获取一个网站的所有图片 如何快速获取一个网站的所有css
今天介绍一款软件,可以快速获取一个网站的所有资源,图片,html,css,js......
拿我格子衫来
2022/01/24
4.3K0
如何快速获取一个网站的所有资源 如何快速获取一个网站的所有图片 如何快速获取一个网站的所有css
如何遍历一个实例的所有属性,得到属性的名称和值
College college = this.collegeService.getCollegeById(id); try { Field[] fields = college.getClass().getDeclaredFields(); for (Field field : fields) { field.setAccessible(true);//类中的成员变量为private,须进行此操作 System.out.pri
qubianzhong
2018/09/19
2.6K0
spring boot 使用ConfigurationProperties注解将配置文件中的属性值绑定到一个 Java 类中
这里给大家推荐一个spring boot的@ConfigurationProperties注解。@ConfigurationProperties 是一个spring boot注解,用于将配置文件中的属性值绑定到一个 Java 类中。它通常与 Spring Boot 应用程序一起使用,以简化配置文件的处理。
高久峰
2023/07/27
7270
maven中如何创建一个Java项目
new project--->maven project --> 勾选(cerate a simple project)-->next
马克java社区
2021/05/20
5420
maven中如何创建一个Web项目
new/other/Maven/Maven project,(use default work space)
马克java社区
2019/09/23
7990
maven中如何创建一个Web项目
一个变量在内存中是如何存储的
我们自学习一门高级语言时,都要了解数据成分,可你们知道在高级语言中数据都是如何在内存中存储的吗?今天我就来介绍一下。
小明爱学习
2020/05/12
2.8K0
C语言 | 将字符串中的元音字母复制到另一个字符串中
解析:if语句判断一下每一个字母是否符合元音字母,读者看着道题的时候,需要注意一点的是如果用scanf函数是否可以,思考为什么要用gets函数?
小林C语言
2021/01/27
4.7K0
C语言 | 将字符串中的元音字母复制到另一个字符串中
如何使用dlinject将一个代码库实时注入到Linux进程中
 关于dlinject  dlinject是一款针对Linux进程安全的注入测试工具,在该工具的帮助下,广大研究人员可以在不使用ptrace的情况下,轻松向正在运行的Linux进程中注入一个共享代码库(比如说任意代码)。之所以开发该工具,是因为目前社区有非常多的反ptrace技术,而dlinject的功能并不基于ptrace实现,因此渗透测试的效果会更好。  工具运行机制  1、该工具首先会向目标进程发送终止运行的信号,并定位_dl_open()方法。接下来,该工具将会通过/proc/[pid]/sysca
FB客服
2023/03/30
1.1K0
如何使用dlinject将一个代码库实时注入到Linux进程中
如何对矩阵中的所有值进行比较?
需求相对比较明确,就是在矩阵中显示的值,需要进行整体比较,而不是单个字段值直接进行的比较。如图1所示,确认矩阵中最大值或者最小值。
逍遥之
2020/05/14
7.8K0
如何将一个目录下的所有md文件导出成pdf
要将一个目录下的所有Markdown(.md)文件导出为PDF,您可以使用Node.js进行编程来实现。以下是一种可能的方法:
拿我格子衫来
2023/08/24
8510
Java中如何输入一个字符
在一次编写代码时需要让程序接收一个字符,当我写出scanner.next时,我惊奇的发现,Scanner类中没有定义读取char的方法!!!
全栈程序员站长
2022/09/08
4870
C语言输入一个数输出对应的值
例8:C语言实现当num<0时,输出result=-1;当num>0时,result=1;当num=0时,result=0。编写一个C程序,输入一个num值,要求输出相应的result值。
小林C语言
2020/11/23
2.1K0
C语言输入一个数输出对应的值
部署一个Sinatra应用程序到Heroku
该文章介绍了如何部署一个Sinatra应用程序到Heroku。首先,需要设置一个Gemfile和一个config.ru文件,使用Git将应用程序部署到Heroku。然后,需要安装Heroku gem,生成SSH密钥并将其添加到Heroku。最后,通过运行`heroku keys:add`命令将SSH密钥添加到Heroku。
Seven塞文
2018/01/05
5.2K0

相似问题

如何将屏幕键盘上的swing文本输入到另一个swing JFrame

10

将动态创建的输入中的值存储到PHP变量

30

将所有URL存储到一个文件中

11

如何创建一个存储过程将4个值插入到一个表中?

11

如何将所有数组值存储到一个数组?

14
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文