有人可以帮助我了解ImageIcon如何为Java工作吗?

时间:2019-09-21 16:01:42

标签: java swing imageicon

所以我大约有5/12个月的Java玩耍经验,但是我从来没有做过骨架之外的任何事情。如果有人可以帮助我理解如何使用Swing使计算机上的图像可见,我将不胜感激。

我在不同的网站之间试图找到答案,但是我尝试过的所有示例代码都没有找到。过去,Stackoverflow有助于通过其他人提出的各种问题来学习Java,因此我自己开设了一个帐户来提出问题。我可能很笨,但是尽管尝试了,但我的形象从未出现过。在放弃之前,我会重新尝试每隔几个月就了解一下秋千,虽然我觉得我掌握了一些基本概念,例如应该将某些东西设置为可见,如何制作/添加JFrame等,但它总是这让我感到困惑。

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。

1 个答案:

答案 0 :(得分:1)

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);

请阅读Layout Manager的Swing教程中的部分,以获取更多信息和BorderLayout的工作示例。

如第一条评论中所述。不需要getContentPane()。框架将自动将组件添加到内容窗格中。

此外,在进行测试时,最好执行以下操作:

JLabel label = new JLabel("Icon label");
label.setIcon(ii);

这样,如果您为图像指定了错误的路径,则至少会看到标签的文本,并且您将知道问题出在路径中,而不是布局代码。