DrawingPanel中刷新图片扩展了JPanel

2024-04-17

我必须在软件底部加载一个小图标。只是有一个加载/确定/错误图标。正如“http://www.article.kth.se/~lindsey/JavaCourse/Book/Part1/Java/Chapter06/images.html”上的建议,我创建了一个扩展 JPanel 的 dwowing 面板。

class drawingPanel extends JPanel
{
    Image img;

    drawingPanel (Image img){
        this.img = img;
    }

    public void paintComponent (Graphics g) {
        super.paintComponent (g);

        // Use the image width & height to find the starting point
        int imgX = getSize ().width/2 - img.getWidth (this);
        int imgY = getSize ().height/2 - img.getHeight (this);

        //Draw image centered in the middle of the panel    
        g.drawImage (img, imgX, imgY, this);
    } // paintComponent

}

我通过以下方式初始化组件:

// Grab the image.
Image img = new ImageIcon(iconPath+"ok.png").getImage();
// Create an instance of DrawingPanel
iconPanel = new drawingPanel(img);

一切正常,但在运行时我希望能够更改面板内的图标。我尝试了以下所有方法,但都没有成功查看新图片:

Image img = new ImageIcon(iconPath+"loading.gif").getImage();
// Create a new  instance of DrawingPanel
this.iconPanel = new drawingPanel(img);
this.iconPanel.repaint();
this.iconPanel.revalidate();
this.iconPanel.repaint();
this.repaint();
this.revalidate();

(我尝试这样做是因为我编写代码的类是包含图标面板的 JPanel 的另一个扩展。知道为什么我无法更改图片吗?

谢谢, 斯特凡诺


首先不要以小名称开头。改名drawingPanel to DrawingPanel.

我尝试根据您的描述制作一个简单的演示,效果很好。面板中的图像正在完美变化。

public class Demo {

    public Demo() {
        JFrame frame = new JFrame();
        frame.setSize(400, 400);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLayout(new BorderLayout());

        // Grab the image.
        Image img = new ImageIcon("1.png").getImage();
        // Create an instance of DrawingPanel
        final DrawingPanel iconPanel = new DrawingPanel(img);

        frame.add(iconPanel, BorderLayout.CENTER);

        JButton button = new JButton("Change image..");
        frame.add(button, BorderLayout.NORTH);

        button.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                iconPanel.setImg(new ImageIcon("2.png").getImage());
                iconPanel.repaint();
            }
        });

        frame.setVisible(true);
    }

    public static void main(String[] args){
        new Demo();
    }
}

class DrawingPanel extends JPanel {
    Image img;

    DrawingPanel(Image img) {
        this.img = img;
    }

    public void setImg(Image img) {
        this.img = img;
    }

    public void paintComponent(Graphics g) {
        super.paintComponent(g);

        // Use the image width & height to find the starting point
        int imgX = getSize().width / 2 - img.getWidth(this);
        int imgY = getSize().height / 2 - img.getHeight(this);

        // Draw image centered in the middle of the panel
        g.drawImage(img, imgX, imgY, this);
    } // paintComponent

}

我所做的更改是添加一个 setter 方法img in DrawingPanel班级。所以不要创建新的DrawingPanel您只需使用新图像调用 settIng() ,然后调用 Paint 来绘制新图像。

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

DrawingPanel中刷新图片扩展了JPanel 的相关文章

  • 使用 JSeperator - Java 时出现异常间隙

    我一直在开发 Swing GUI 并在添加后出现一些不寻常和不需要的间隙JSeperator 知道如何删除它们吗 或者任何其他选择来很好地实现这一目标 视觉描述 之前差距就很明显了JLabel 速度 及之后JSlider 相关代码 cont
  • 如何使用Netbeans的不确定进度条样式?

    我正在使用 Nimbus 外观和感觉编写 Java 应用程序 不幸的是 Nimbus 外观和感觉的不确定 JProgressBars 的外观是AWFUL 见下文 另一方面 我注意到 Netbeans 与 Nimbus 的外观和感觉有不同的不
  • Java 容器删除方法无法正常工作

    我添加了 1 TextArea 2 TextField 然后我开始在容器上连续添加 JButton 现在通过使用 JRadioButton 我想使用此代码从容器中删除 JButton i 0 k 0 while birdButton i i
  • Java垂直布局?

    我需要将 JLabel 垂直放置在一些 JButton 上 就像游戏菜单一样 它们都应该居中 我已经下载了 MigLayout 但我不知道如何使用它 所以我只是想要一种方法来垂直和居中定位我的组件 无论 MigLayout 与否 另外 我不
  • Swing JTable:当行可见或滚动到底部时发生事件?

    我正在寻找一种方法 以便在 JTable 滚动时收到通知 以便特定行变得可见 或者在表底部滚动到视图中时失败 理想情况下 这应该在不轮询的情况下完成 而是通过一些事件触发来完成 有任何想法吗 Add a ChangeListener到滚动窗
  • 如何将一个窗格连接到另一个窗格

    如何将输出连接到paneWithList PaneWithList其上有一个监听器JList以便将所选行输出到控制台 我怎样才能将该输出定向到JTextPane关于输出 Could PaneWithList触发一个事件Main拿起 会属性更
  • Android:删除行后如何刷新表格布局?

    我有一个从 txt 文件检索数据的表格布局 txt文件中的每一行数据都会有一行数据 假设我现在 txt 文件中有两行数据 那么将生成两个表行是有意义的 然后 我添加了一个 OnLongPress 监听器 当调用该监听器时 它将从 txt 文
  • java中使用awt.Toolkit和Clipboard是否可以知道剪贴板中复制的内容是否是mp3文件

    我正在尝试编写一个运行于背景 and monitors复制 a 的复制操作 mp3 file or a 文件夹包含 a mp3 file Clipboard cb Toolkit getDefaultToolkit getSystemCli
  • 如何在android中的地图触摸位置上动态绘制形状

    我想绘制一个形状 无论用户在哪里触摸地图 都应该动态绘制 我对绘制这些形状没有任何想法 我怎样才能做到这一点 我可以通过画布完成这个工作吗 我正在使用 MapFragment 请看图片 请给我任何想法 任何帮助表示赞赏 您可以通过添加一个来
  • 覆盖 VK_Tab 焦点操作

    再会 我正在向 jTextField 添加 keyevent 侦听器 以便如果用户按下 Tab 键 插入符号位置将转到 jtextField 内文本的末尾 这是我的代码 private void jTextField1KeyPressed
  • Java刷新第二种形式

    我有两种形式 第一个是使用jslider来确定按钮的数量 第二种形式是根据jslider值显示jbuttons 当我单击 jbutton2 时 第二个窗体显示并显示按钮 它工作得很好 但是 我想在第二个表单上创建 jbutton 而不单击第
  • Java AWT/Swing:获取有关窗口位置/大小变化的通知

    我有一个窗口 我希望在位置或大小发生变化时收到通知 哪种类型的听众最适合 WindowListener不适合我 您可以使用组件监听器 http docs oracle com javase tutorial uiswing events c
  • 添加 TableRowSorter 将值添加到模型后会导致 java.lang.IndexOutOfBoundsException:无效范围

    将 TableRowSorter 添加到表及其相应模型后 任何相应的添加 专门在 firetabletablerowsinserted 处 都会导致异常 从测试中可以清楚地看出 GetRowCount 返回的值超出了模型范围 但是 在添加排
  • 如何为我的数独游戏制作 GUI? (摇摆)

    到目前为止 我已经编写了生成随机 9x9 数独网格的代码 我是Java的初学者 所以我有一些关于如何做UI的问题 显示数字的最佳方式是什么 我尝试创建 81 个 JTextFields 这非常乏味 而且我确信有一种有效的方法可以做到这一点
  • win32 内容已更改,但除非移动窗口,否则不会显示更新

    我的 win32 GUI 内容每秒都会更改 但除非手动移动窗口 否则不会显示更新 我尝试每秒弹出一个消息框来触发窗口刷新 它成功了 因此 这证明我的内容确实发生了变化 但窗口没有更新 我希望刷新窗口而不是每次都弹出消息框 有没有这样的窗口功
  • JMenuItems 在 JLayeredPane 中的较高组件上绘制

    我在 JLayeredPane 的一层上的 JPanel 中有一组 JMenuItem 并在更高层的 JPanel 中绘制了一个模拟光标 当菜单项重新绘制时 它们会在模拟光标上绘制 不会触发光标层的重新绘制 有趣的是 如果我用 JButto
  • 如何在 JPanel 上绘制后重新绘制它?

    我有一个继承自 JPanel 的组件 我在上面绘制了一个网格 现在我有一个 JComboBox 我希望用户能够在此处选择网格大小 然后按按钮进行网格更改 重新绘制网格 问题是它绘制了初始网格 但是一旦用户从 JComboBox 选择网格大小
  • 如何在java swing中的每个页面中打印带有页脚的整个JPanel

    好吧 这可能很简单 但想不通 我有一个包含 JTable 的 JPanel JTable 包含很少的行 有时更多 因为我推入其中的表模型取决于数据库 但是 我不使用任何包含 JTable 的 JScolpane 因此 当 JTable 包含
  • 如何自定义JProgressBar?

    我正在制作一个启动器 我想要一个自定义的进度栏 我已经做了一些研究 并且可以使用 JavaFX 从未用它做过任何事情 并且可以通过替换 UI 来实现 我正在寻找一个具有圆形边缘和圆形填充的酒吧 像这样的事情 package gui impo
  • java JFileChooser 文件大小过滤器

    我知道我可以按文件类型进行过滤 但是可以按文件大小进行过滤吗 例如 JFileChooser 仅显示 3 MB 以内的图片 简短的回答应该是 你尝试过什么 长答案是肯定的 JFileChooser fc new JFileChooser f

随机推荐

  • 为什么这个slideUp功能不流畅?

    我想实现 jQuery 的普通 JS 版本slideUp and slideDown 功能 我的想法是使用 CSStransition为了height属性以及使用增加 减少高度requestAnimationFrame 我用下面的代码尝试过
  • Selenium WebDriverJS,无法为 Chrome 构建 webdriver

    我在设置 Selenium WebDriverJS 时遇到一些问题 我的目标是使用 Javascript 节点 在 Chrome 浏览器上运行 selenium 测试 我正在按照以下说明进行操作https code google com p
  • 我需要关闭“PreparedStatement”吗? [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我有一个网
  • 如何从 Azure 云功能引用“可移植”.NET 程序集?

    我已通过 Nuget 和 project json 成功引用了一个 可移植 程序集 我的所有代码都在 Azure 函数中编译 但是当它运行时我得到 无法加载文件或程序集 System Net Version 2 0 5 0 Culture
  • 获取 v2 Google 地图 API 密钥

    看来在我的网站开发和上线 现在 之间 Google 已经逐步淘汰了 Google Maps v2 API 我完全支持进步 但重写我所有的地图代码似乎对我来说有点难以处理 是否仍然可以在网络的某个隐蔽角落获取 Google 地图 v2 API
  • Delphi组件spTbxToolbar换肤

    如何在运行时通过代码 不适用于 groupskintype 更改 sptbxtoolbar 组件的皮肤类型 您只能一次更改所有 SpTBXLib 组件的外观 使用此代码 SkinManager SetSkin Office 2007 Blu
  • 使用drawImage()在画布上输出固定大小的图像?

    我该如何使用drawImage 在a上输出全尺寸图像300px X 380px画布无论源图像大小如何 例子 1 如果有一个图像75px X 95px我希望能够将其绘制以适合300px X 380px帆布 2 如果有一个图像1500px X
  • 使用 CSS 扩展边框

    我一直在测试使用一些嵌套 div 扩展 投影边框的想法 下面有一个工作示例 基本上 我想要实现的是垂直和水平边框延伸到盒子外面 里面有内容 有点像起草的样子 如果可能的话 我希望它能够完全响应 在我的代码中 我设置了带有负边距的高度 以便获
  • 为桌面构建 flutter 应用程序

    我看到一些人成功地为除通常的 Android IOS 之外的其他操作系统构建了 flutter 应用程序 我的问题很简单 如何 目前为 mac windows 构建 flutter 应用程序的流程是什么 没有必要这样生产准备就绪 一些实验性
  • Pandas groupby 根据另一列中的值(0 或 1)选择最后一行或倒数第二行

    我有一个与客户的数据框 每个客户都有一些观察结果和变量 其中一些不再是客户 我的问题如下 我想按客户分组 如果客户仍然是客户 则选择最后一行 如果客户不再是客户 则选择倒数第二行 对于客户的所有观察 我有一个名为 churned 的列 如果
  • 获取 Android 操作系统中已注册的 Pending Intent 列表

    我注册了计划在给定时间执行的警报 并且根据计划列表的大小 可以有很多警报 但我有两个问题仍然不清楚 1 如何在操作系统中查询我注册的待处理意图 我需要这个来测试 我想要的伪代码是这样的 List
  • 如何向 ionic 4 应用程序添加和使用 bootstrap?

    我正在构建一个 ionic 4 应用程序 我想使用 bootstrap 而不使用 CDN 方法 我已经使用 npm install bootstrap 安装了 bootstrap 在 Ionic 4 中 可以通过使用 angular jso
  • 如何更改 PostgreSQL 中的最大列宽?

    我有一个简单的 SQL 查询 它从一个表中选择几行 其中一列包含很长的字符串 我想设置最大列宽 以便更容易阅读 我无法通过 pset 访问环境变量 None
  • 测试 SQL 查询的最佳方法[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我遇到了一个问题 复杂的 SQL 查询总是出错 从本质上讲 这会导致向错误的客户发送邮件以及其他类似的 问题 大家对于创建这样的 SQL 查询有
  • 如何在 Jetpack Compose Pager 中处理多个 TextField 焦点?

    我有一个寻呼机 每个页面上都有一个 TextField 我正在做过渡animateScrollToPage 如何让每个页面上的 TextField 获得焦点 当我给予Modifier focusRequster 到文本字段并检查index
  • 可选链的动态类型与赋值不同

    可选的链接返回always一个可选值 为了反映可以对 nil 值调用可选链接的事实 可选链接调用的结果始终是可选值 即使您正在查询的属性 方法或下标返回非可选值 Swift 编程语言 https developer apple com li
  • QComboBox 是否可以显示与其列表中不同的值?

    在 Linux 上使用 Qt 5 9 我有一个带有多个标签的 QComboBox qc new QComboBox qc gt addItem tr Red qc gt addItem tr Green qc gt addItem tr B
  • 用新的 Dataframe 替换一行

    我正在寻找一种更优雅的方法来从字典的值替换另一个数据帧中的数据帧 这是我必须使用的数据类型的示例 d 1 name bob age 22 Data 4 name sam age 30 Data 2 name tom age 20 Data
  • getDownloadUrl 是付费操作吗?

    我想知道是否getDownloadUrl在 Firebase 存储 Google Cloud Storage 上 一种获取存储上文件的公共 URL 的方法 是付费操作 即使读完之后文档 https cloud google com stor
  • DrawingPanel中刷新图片扩展了JPanel

    我必须在软件底部加载一个小图标 只是有一个加载 确定 错误图标 正如 http www article kth se lindsey JavaCourse Book Part1 Java Chapter06 images html 上的建议