java - 有人可以帮我理解 ImageIcon 如何适用于 java 吗?
问题描述
所以我有大约一年 5/12 个月的使用 java 的经验,但我从来没有能够在骨架之外制作任何东西。如果有人可以帮助我了解如何使用 swing 使计算机中的图像可见,我将不胜感激。
我已经在不同的网站之间寻找答案,但我尝试过的示例代码都没有成功。Stackoverflow 过去曾帮助通过其他人提出的各种问题来学习 Java,所以我自己注册了一个帐户来问一个问题。我可能很愚蠢,但尽管我尝试过,但我的形象从未出现过。在之前放弃它之后,我每隔几个月就会重新尝试理解 swing这让我很困惑。
import javax.swing.*;
import java.awt.*;
public class Main extends JFrame {
public static void main(String[] args) {
JFrame frame = new JFrame("main");
frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
ImageIcon ii = new ImageIcon("C:\\Users\\plasm\\IdeaProjects\\Shdo\\src\\mario.jpg");
JLabel lable = new JLabel(ii);
JScrollPane jsp = new JScrollPane(lable);
frame.getContentPane().add(jsp);
frame. setSize(1000, 700);
JButton button = new JButton();
button.setSize(new Dimension(300, 300));
button.setLocation(500, 350);
frame.getContentPane().add(button);
frame.setVisible(true);
}
}
上面的代码是从https://www.daniweb.com/programming/software-development/threads/379864/add-image-and-button-to-jframe复制粘贴的,除了路径之外,它只显示了一个设定尺寸的基本白色 JFrame。
解决方案
frame.getContentPane().add(jsp); // problem
frame. setSize(1000, 700);
JButton button = new JButton();
button.setSize(new Dimension(300, 300)); // does nothing
button.setLocation(500, 350); // does nothing
frame.getContentPane().add(button); //problem
问题是 JFrame 的内容窗格的默认布局管理器是 BorderLayout。您正在尝试将两个组件添加到 BorderLayout 的 CENTER,这不起作用。该按钮取代了滚动窗格。
相反,您应该使用:
frame.getContentPane().add(jsp, BorderLayout.CENTER);
frame. setSize(1000, 700);
JButton button = new JButton("Testing");
frame.getContentPane().add(button, BorderLayout.PAGE_END);
阅读有关布局管理器的 Swing 教程部分,了解更多信息和 BorderLayout 的工作示例。
如第一条评论所述。没有必要getContentPane()
。框架会自动将组件添加到内容窗格中。
此外,在进行测试时,最好执行以下操作:
JLabel label = new JLabel("Icon label");
label.setIcon(ii);
这样,如果您为图像指定了错误的路径,您至少会看到标签的文本,并且您会知道问题出在路径上,而不是布局代码。
推荐阅读
- phpmyadmin - 如何修复easyphp devserver mysql?mysqlcheck 显示很多错误
- python - 创建具有多个条件的递归 Python 函数
- postgresql - Postgres在哪里存储表序列信息
- c - C - 两个数组之间的 AND 运算符
- html - 如何使所有块的宽度相同?
- android - Android 线程 postDelayed 不起作用
- c++ - std::string[] 成员释放在构造函数抛出异常期间失败
- tcl - TCL 中“> stdout”和“>@ stdout”的用法差异
- c# - 无法在 C# bot 框架中集成 OpenXML (documentformat.openxml.*),出现错误“Autofac.Core.DependencyResolutionException”
- scala - ObjectMapper readValue(content: String) 如果字符串在 Scala 中为空“”,则给出 MismatchedInputException