在 Netbeans GUI Builder 中开发现有 GUI 代码

2024-02-04

我正在 Eclipse 中做项目,我做了 Swing 部分。但现在,我希望使用 Netbeans 来完成项目的 Swing 部分,因为它更容易完成,而且我能够更整洁地完成它,因为我对 swing 及其布局管理器没有太多经验。 这是我在 stackoverflow 上找到的一个示例,其中包含一些 swing 组件。

import java.awt.*;
import java.awt.event.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.net.*;
import java.util.HashMap;
import java.util.Map;
import javax.imageio.ImageIO;
import javax.swing.*;

public class MoveIcon extends JPanel {

    private static final long serialVersionUID = 1L;
    private static final String IMAGE_PATH = "http://duke.kenai.com/misc/Bullfight.jpg";
    private static final String IMAGE_PATH_PLAYER = "http://duke.kenai.com/iconSized/duke4.gif";
    public static final int STEP = 3;
    private static final int TIMER_DELAY = STEP * 8;
    private BufferedImage bkgrndImage = null;
    private BufferedImage playerImage = null;
    private Map<Direction, Boolean> directionMap = new HashMap<Direction, Boolean>();
    private int playerX = 0;
    private int playerY = 0;

    enum Direction {

        UP(KeyEvent.VK_UP, 0, -1), DOWN(KeyEvent.VK_DOWN, 0, 1),
        LEFT(KeyEvent.VK_LEFT, -1, 0), RIGHT(KeyEvent.VK_RIGHT, 1, 0);
        private int keyCode;
        private int xDirection;
        private int yDirection;

        private Direction(int keyCode, int xDirection, int yDirection) {
            this.keyCode = keyCode;
            this.xDirection = xDirection;
            this.yDirection = yDirection;
        }

        public int getKeyCode() {
            return keyCode;
        }

        public int getXDirection() {
            return xDirection;
        }

        public int getYDirection() {
            return yDirection;
        }
    }

    public MoveIcon() {
        try {
            URL bkgrdImageURL = new URL(IMAGE_PATH);
            URL playerImageURL = new URL(IMAGE_PATH_PLAYER);
            bkgrndImage = ImageIO.read(bkgrdImageURL);
            playerImage = ImageIO.read(playerImageURL);
            setPreferredSize(new Dimension(bkgrndImage.getWidth(), bkgrndImage.getHeight()));
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        for (Direction direction : Direction.values()) {
            directionMap.put(direction, false);
        }
        setKeyBindings();
        Timer timer = new Timer(TIMER_DELAY, new TimerListener());
        timer.start();
    }

    private void setKeyBindings() {
        InputMap inMap = getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
        ActionMap actMap = getActionMap();
        for (final Direction direction : Direction.values()) {
            KeyStroke pressed = KeyStroke.getKeyStroke(direction.getKeyCode(), 0, false);
            KeyStroke released = KeyStroke.getKeyStroke(direction.getKeyCode(), 0, true);
            inMap.put(pressed, direction.toString() + "pressed");
            inMap.put(released, direction.toString() + "released");
            actMap.put(direction.toString() + "pressed", new AbstractAction() {

                private static final long serialVersionUID = 1L;

                @Override
                public void actionPerformed(ActionEvent e) {
                    directionMap.put(direction, true);
                }
            });
            actMap.put(direction.toString() + "released", new AbstractAction() {

                private static final long serialVersionUID = 1L;

                @Override
                public void actionPerformed(ActionEvent e) {
                    directionMap.put(direction, false);
                }
            });
        }

    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        if (bkgrndImage != null) {
            g.drawImage(bkgrndImage, 0, 0, null);
        }
        if (playerImage != null) {
            g.drawImage(playerImage, playerX, playerY, null);
        }
    }

    private class TimerListener implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            boolean moved = false;
            for (Direction direction : Direction.values()) {
                if (directionMap.get(direction)) {
                    playerX += STEP * direction.getXDirection();
                    playerY += STEP * direction.getYDirection();
                    moved = true;
                }
            }
            if (moved) {
                int x = playerX - 2 * STEP;
                int y = playerY - 2 * STEP;
                int w = playerImage.getWidth() + 4 * STEP;
                int h = playerImage.getHeight() + 4 * STEP;
                MoveIcon.this.repaint(x, y, w, h); // !! repaint just the player
            }
        }
    }

    private static void createAndShowUI() {
        JFrame frame = new JFrame("MoveIcon");
        frame.getContentPane().add(new MoveIcon());
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        java.awt.EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                createAndShowUI();
            }
        });
    }
}

问题是:一些 swing 组件已经以编程方式设计,我可以在 netbeans 中打开这个项目并使用其 GUI 构建器进一步构建 GUI 部分吗?


不,但是是的。

该问题与 NetBeans 如何处理其项目和 UI 构建器有关。

Netbeans 在项目文件夹的根目录中放置一个名为“nbproject”的文件夹,其中包含 Netbeans 特有的内容,而这些内容在 Eclipse 中不会发生(我会解释,但这超出了您的问题的范围)。但是,您可以使用File -> Import Project -> Eclipse Project...它应该有效。

更棘手的部分来自 Swing GUI。您绝对可以将 Swing 代码导入到 Netbeans 中,但 Netbeans 有自己的库,该库并不完全是纯粹的 Swing。它被称为org.jdesktop.application它包括SingleFrameApplication, FrameView,以及其他一些定制的东西。当您使用 Netbeans 框架构建应用程序时,它会优先选择这些类而不是“实际的”Swing。您可以使用拖放编辑器吗?我从未尝试过,但我敢打赌答案是否定的。另一方面,我现在正在处理一个项目,我放弃了 Netbeans Swing,转而使用纯 Swing,如果您可以接受没有拖放功能,那实际上很好。它更加灵活和强大,因为生成的代码不会被编辑阻止。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Netbeans GUI Builder 中开发现有 GUI 代码 的相关文章

  • 如何在java中将一个数组列表替换为另一个不同大小的数组列表

    我有两个大小不同的数组列表 如何从此替换 ArrayList
  • HSQL - 识别打开连接的数量

    我正在使用嵌入式 HSQL 数据库服务器 有什么方法可以识别活动打开连接的数量吗 Yes SELECT COUNT FROM INFORMATION SCHEMA SYSTEM SESSIONS
  • 如何在 Spring 中禁用使用 @Component 注释创建 bean?

    我的项目中有一些用于重构逻辑的通用接口 它看起来大约是这样的 public interface RefactorAwareEntryPoint default boolean doRefactor if EventLogService wa
  • jQuery AJAX 调用 Java 方法

    使用 jQuery AJAX 我们可以调用特定的 JAVA 方法 例如从 Action 类 该 Java 方法返回的数据将用于填充一些 HTML 代码 请告诉我是否可以使用 jQuery 轻松完成此操作 就像在 DWR 中一样 此外 对于
  • 如何更改javaFX中按钮的图像?

    我正在使用javaFX 我制作了一个按钮并为此设置了图像 代码是 Image playI new Image file c Users Farhad Desktop icons play2 jpg ImageView iv1 new Ima
  • 谷歌应用程序引擎会话

    什么是java应用程序引擎 默认会话超时 如果我们将会话超时设置为非常非常长的时间 会不会产生不良影响 因为谷歌应用程序引擎会话默认情况下仅存储在数据存储中 就像facebook一样 每次访问该页面时 会话仍然永远存在 默认会话超时设置为
  • 将 MOXy 设置为 JAXB 提供程序,而在同一包中没有属性文件

    我正在尝试使用 MOXy 作为我的 JAXB 提供程序 以便将内容编组 解组到 XML JSON 中 我创建了 jaxb properties 文件 内容如下 javax xml bind context factory org eclip
  • jdbc mysql loginTimeout 不起作用

    有人可以解释一下为什么下面的程序在 3 秒后超时 因为我将其设置为在 3 秒后超时 12秒 我特意关闭了mysql服务器来测试mysql服务器无法访问的这种场景 import java sql Connection import java
  • Java ResultSet 如何检查是否有结果

    结果集 http java sun com j2se 1 4 2 docs api java sql ResultSet html没有 hasNext 方法 我想检查 resultSet 是否有任何值 这是正确的方法吗 if resultS
  • GUI(输入和输出矩阵)?

    我需要创建一个 GUI 将数据输入到矩阵或表格中并读取此表单数据 完美的解决方案是限制输入表单仅允许float 例如 A 1 02 0 25 0 30 0 515 0 41 1 13 0 15 1 555 0 25 0 14 1 21 2
  • tomcat 中受密码保护的应用程序

    我正在使用 JSP Servlet 开发一个Web应用程序 并且我使用了Tomcat 7 0 33 as a web container 所以我的要求是tomcat中的每个应用程序都会password像受保护的manager applica
  • 获取文件的总大小(以字节为单位)[重复]

    这个问题在这里已经有答案了 可能的重复 java 高效获取文件大小 https stackoverflow com questions 116574 java get file size efficiently 我有一个名为 filenam
  • 关键字“table”附近的语法不正确,无法提取结果集

    我使用 SQL Server 创建了一个项目 其中包含以下文件 UserDAO java public class UserDAO private static SessionFactory sessionFactory static se
  • 如何使用 jUnit 将测试用例添加到套件中?

    我有 2 个测试类 都扩展了TestCase 每个类都包含一堆针对我的程序运行的单独测试 如何将这两个类 以及它们拥有的所有测试 作为同一套件的一部分执行 我正在使用 jUnit 4 8 在 jUnit4 中你有这样的东西 RunWith
  • 专门针对 JSP 的测试驱动开发

    在理解 TDD 到底是什么之前 我就已经开始编写测试驱动的代码了 在没有实现的情况下调用函数和类可以帮助我以更快 更有效的方式理解和构建我的应用程序 所以我非常习惯编写代码 gt 编译它 gt 看到它失败 gt 通过构建其实现来修复它的过程
  • Cucumber 0.4.3 (cuke4duke) 与 java + maven gem 问题

    我最近开始为 Cucumber 安装一个示例项目 并尝试使用 maven java 运行它 我遵循了这个指南 http www goodercode com wp using cucumber tests with maven and ja
  • 我如何在java中读取二进制数据文件

    因此 我正在为学校做一个项目 我需要读取二进制数据文件并使用它来生成角色的统计数据 例如力量和智慧 它的设置是让前 8 位组成一个统计数据 我想知道执行此操作的实际语法是什么 是不是就像读文本文件一样 这样 File file new Fi
  • 包 javax.el 不存在

    我正在使用 jre6 eclipse 并导入 javax el 错误 包 javax el 不存在 javac 导入 javax el 过来 这不应该是java的一部分吗 谁能告诉我为什么会这样 谢谢 米 EL 统一表达语言 是 Java
  • CamcorderProfile.videoCodec 返回错误值

    根据docs https developer android com reference android media CamcorderProfile html 您可以使用CamcorderProfile获取设备默认视频编解码格式 然后将其
  • 双枢轴快速排序和快速排序有什么区别?

    我以前从未见过双枢轴快速排序 是快速排序的升级版吗 双枢轴快速排序和快速排序有什么区别 我在 Java 文档中找到了这个 排序算法是双枢轴快速排序 作者 弗拉基米尔 雅罗斯拉夫斯基 乔恩 本特利和约书亚 布洛赫 这个算法 在许多数据集上提供

随机推荐

  • 通过 NFS 上传文件时出现操作系统错误

    当我尝试通过 django 管理界面上传媒体文件时 出现以下错误 OSError Errno 45 Operation not supported 这是回溯的最后一行 File path to home Envs myenv lib pyt
  • 当Java类是Serialized的实例时

    我想知道Java类何时是Serialized的实例 据我所知 只有实现了 Serialized 接口的类才是可序列化的 我正在尝试使用 junit 生成实体类 从某种模板 并检查它是否可序列化 我生成的类 不实现可序列化 如下所示 pack
  • IKImageBrowserView可以显示多行标题吗?

    我想要我的IKImageBrowserView通过将其换行并将其显示在多行中来显示长标题 但我一直无法实现这一点 我尝试更改返回的 titleFrame 的大小ImageBrowserCell子类 并在标题上设置段落样式 以便它应该换行 N
  • Qt - 在我的 MainWindow 上调用 setLayout() 时编译器抱怨

    我想学习如何在没有设计师的情况下手工创建 GUI 我尝试添加一个布局到我的MainWindow但运行时它说 QWidget setLayout 尝试在主窗口 上设置 QLayout 该窗口已经有布局 这是我的代码 Header class
  • Node.js:何时使用 Promises 与 Callbacks

    我正在更新一些较旧的 Node js 代码 在此过程中 我正在设计新模块来使用旧代码 我发现现在 与我第一次写这篇文章时相比 我更多地依赖于使用 ES6 承诺而不是回调 所以现在我有一些返回承诺的函数和一些回调函数的组合 这是乏味的 我认为
  • 如何阻止 Electron windows 共享 cookie?

    我正在电子应用程序中创建多个浏览器窗口 但我不希望它们共享 cookie 这就是我目前创建窗口的方式 function createWindow Create the browser window let mainWindow new Br
  • 如何检查设备是否有互联网连接:cocos-2d

    在我的一款 iPhone 应用程序中 我需要查明该设备是否有互联网连接 有人请帮忙吗 使用可达性类 if self checkInternetConnected NSLog Internet connected n BOOL checkIn
  • 有没有办法恢复MySql用户密码?

    我忘记了 MySQL 中一位用户的密码 有没有办法恢复MySQL用户密码 你不能recover但是你可以设置一个不同的 though 像这样 使用 skip grant tables 选项停止和启动 MySQL 进程 登录root用户 列出
  • 为什么我在 DatePickerDialog 中收到额外的标头?

    我得到了 DatePickerDialog 的额外标头 如下面的快照所示 我不想要这个 我在这里做错了什么 我需要没有该标头的 DatePickerDialog 请查看代码并让我知道代码的哪一部分去了错误的 非常感谢您的帮助 我的活动 pu
  • Numpy的matrix_power函数对大指数给出错误的结果[重复]

    这个问题在这里已经有答案了 我正在使用 Numpy 来实现斐波那契数列Q 矩阵法 http mathworld wolfram com FibonacciQ Matrix html 直到 n 47 为止结果都很好 此时 matrix pow
  • Jenkins 文本查找器插件,如何将此插件与 jenkinsfile 一起使用?

    我正在尝试使用编写 jenkinsfile文本查找器插件 https wiki jenkins io display JENKINS Text finder Plugin 但我不知道它到底是如何工作的 这是我的代码 pipeline age
  • 如何在 Subversion 中删除文件夹的 1 个修订版

    我的存储库中有几个项目 每个项目都有自己的文件夹 是否可以删除其中一个项目的最后修订版而不更改其他任何内容 示例 项目 A 的最新版本已提交创建 rev 50 其他项目的工作仍在继续 存储库现已更新 60 现在 A 的用户回来并请求删除上一
  • HTML:替换

    我一直认为更换
  • Rails Activeadmin - 自定义关联选择框

    在我的 Rails 应用程序中 我有以下模型 class Idea lt ActiveRecord Base belongs to user end class User lt ActiveRecord Base has many idea
  • 如何从 ASP.Net OpenID Connect OWIN 组件设置声明?

    我对使用新的 ASP Net OpenID Connect 框架同时在身份验证管道中添加新声明有疑问 如下面的代码所示 我不确定幕后到底发生了多少 魔法 我认为我的大部分问题都围绕着对 OWIN 身份验证中间件而不是 OpenID Conn
  • 运行 React 应用程序时找不到模块“@babel/plugin-transform-react-jsx-source”

    我刚刚创建了一个 React 应用程序create react app aquastars然后使用弹出依赖项yarn run eject当我运行该应用程序时 出现以下错误 找不到模块 babel plugin transform react
  • VS2010 LNK1181 重建带有依赖项的项目时

    我有一个包含两个 C CLR 项目的解决方案 一个项目引用另一个项目 因此项目依赖项和构建顺序正确反映了这一点 两个项目都针对相同的输出文件夹 依赖项目的依赖配置为Copy Local false 如果我自己 重建 依赖关系 它会构建得很好
  • servlet 引擎在调用 servlet 之前是否读取整个请求?

    Servlet 引擎 例如Tomcat or Jetty 接收 HTTP 请求并使用 servlet 调用HttpServletRequest对象 其中包含一个InputStream请求正文的 现在我想知道引擎是否已经读取整体来自网络的请求
  • (AWS) Athena:查询结果似乎太短

    我的 Athena 查询的结果似乎太短 试图找出为什么 Setup 胶水目录 尺寸为 118 6 G 数据 以 CSV 和 JSON 格式存储在 S3 中 Athena Query 当我查询整个表的数据时 每次查询只得到 40K 条结果 一
  • 在 Netbeans GUI Builder 中开发现有 GUI 代码

    我正在 Eclipse 中做项目 我做了 Swing 部分 但现在 我希望使用 Netbeans 来完成项目的 Swing 部分 因为它更容易完成 而且我能够更整洁地完成它 因为我对 swing 及其布局管理器没有太多经验 这是我在 sta