Java Swing映像不';不显示
这是我在这里的第一篇文章,我的英语不是很好,所以我希望你们的朋友 了解我有什么问题,我也希望我在这里没有做错什么 我的问题是: 我正在学习atm Swing以及它是如何工作的,但我总是遇到一些图片方面的问题,这些问题并没有出现。 也许我不理解Swing的某些部分,所以我希望你能解释为什么图片没有加载,这样我就可以学习它并做得更好:) 我尝试了很多变化,但我真的失败了,我不知道为什么。 我还尝试了图形 我的节目: JFrame->JPanel->JLabel(它们有图片,应该放在JPanel上,或者在JPanel上有直接的方法) test2.jpg在我的包文件夹中,eclipsedont发出一个错误 此外,我将JPanel放在一个单独的类中,就像它一样,不会将JFrame扩展到Gui类 以下是我的三门课: 开始:Java Swing映像不';不显示,java,image,swing,embedded-resource,Java,Image,Swing,Embedded Resource,这是我在这里的第一篇文章,我的英语不是很好,所以我希望你们的朋友 了解我有什么问题,我也希望我在这里没有做错什么 我的问题是: 我正在学习atm Swing以及它是如何工作的,但我总是遇到一些图片方面的问题,这些问题并没有出现。 也许我不理解Swing的某些部分,所以我希望你能解释为什么图片没有加载,这样我就可以学习它并做得更好:) 我尝试了很多变化,但我真的失败了,我不知道为什么。 我还尝试了图形 我的节目: JFrame->JPanel->JLabel(它们有图片,应该放在JPanel上,或
package verwaltungssoftware;
public class Start
{
//Start der Applikation
public static void main(String[] args)
{
System.out.println("Willkommen bei der Verwaltungssoftware fuer die Jobsuche");
new Gui();
}
}
图形用户界面:
和小组:
package verwaltungssoftware;
import java.awt.BorderLayout;
import java.awt.Image;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class Panel extends JPanel
{
private static final long serialVersionUID = 6769810448979262470L;
//Variablen
Image icon1;
//Konstruktor
public Panel()
{
try
{
icon1 = ImageIO.read(getClass().getResource("test2.jpg"));
}
catch (IOException e)
{
e.printStackTrace();
}
JPanel panelhauptfenster = new JPanel();
panelhauptfenster.setLayout(new BorderLayout (5,5));
panelhauptfenster.setSize(1280,800);
panelhauptfenster.setLocation(0,0);
panelhauptfenster.setVisible(true);
JLabel myLabel=new JLabel();
myLabel.setLocation(0,0);
myLabel.setSize(panelhauptfenster.getWidth(),panelhauptfenster.getHeight());
myLabel.setIcon(new ImageIcon(icon1));
myLabel.setVisible(true);
panelhauptfenster.add(myLabel);
}
}
非常感谢您的帮助。像这样试试。
icon1=newImageIcon(getClass().getResource(“/test2.jpg”)下面的源代码可以正常工作。变化包括:
- 返回合理的首选大小。删除对
的所有调用setSize(..)
- 分解图像添加到的面板,而是直接将其添加到
实例面板
- 但是
被重命名为Panel
,因此该名称与现有的AWT类不同李>ImagePanel
- 删除对
的调用。唯一适用于的是顶级容器,如setVisible(..)
或JFrame
。对于其余部分,将它们添加到自身可见的容器中JDialog
getClass().getResource(“test2.jpg”)
。图像是否位于verwaltungssoftware
目录/路径中,getResource
希望在其中找到它?当我更改它时,路径是正确的,它会给我一个错误:线程“main”java.lang.IllegalArgumentException:input==null!在verwaltungssoftware.Panel.(Panel.java:25)在verwaltungssoftware.Gui.(Gui.java:34)在verwaltungssoftware.Start.main(Start.java:13)的javax.imageio.imageio.read(imageio.java:1388)在verwaltungssoftware.Panel.(Panel.java:25)在verwaltungssoftware.Gui.(Gui.java:34)在verwaltungssoftware。将getClass().getResource(“test2.jpg”)
放入源代码中,我输入了一个答案,然后尝试一下。上面代码中的方法有许多缺陷,我已更正。无法从Imageicon转换为Imageicon对不起,我无法理解您的意思。加载的图片很好,但我不知道如何将面板安装到框架中。当preferedsize从这里获取宽度和长度时,我必须在某个地方设置面板的大小,因为我将它添加到gui框架中。当我了解到图标的大小与GetPreferedSizei后的面板大小正确时,如果您需要进一步的帮助,请准备一个(最小完整可验证示例),如我发布的。值得注意的是,它需要一个源文件(可能有多个类,尽管只有一个public
类),并且应该热链接到该图像。我犯了一个错误,它可以工作,但我无法使用示例中的URL,因为我有一个路径。我想我需要像下面写的康迪那样做。但有一个问题是java无法从Imageicon转换为图像。“我不能使用像您在示例中这样的URL,因为我有一个路径”您确实意识到getResource(…)
返回一个URL,对吗?不要考虑你的应用程序是如何运行的。最终会看到什么或者它将使用什么图像。我建议热链接到一个图像,这样(当你运行代码时)你可以看到它,我们可以看到它,将来任何人都可以看到它。中提到了我链接到的图像。我特别要求它提供我们可能热链接到的示例图像。别费心了,好了,现在开始工作了,当我现在看代码的时候,我真的很笨:)非常感谢你,汤普森。对不起,我没有首先理解你所说的热链接是什么意思。
package verwaltungssoftware;
import java.awt.BorderLayout;
import java.awt.Image;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class Panel extends JPanel
{
private static final long serialVersionUID = 6769810448979262470L;
//Variablen
Image icon1;
//Konstruktor
public Panel()
{
try
{
icon1 = ImageIO.read(getClass().getResource("test2.jpg"));
}
catch (IOException e)
{
e.printStackTrace();
}
JPanel panelhauptfenster = new JPanel();
panelhauptfenster.setLayout(new BorderLayout (5,5));
panelhauptfenster.setSize(1280,800);
panelhauptfenster.setLocation(0,0);
panelhauptfenster.setVisible(true);
JLabel myLabel=new JLabel();
myLabel.setLocation(0,0);
myLabel.setSize(panelhauptfenster.getWidth(),panelhauptfenster.getHeight());
myLabel.setIcon(new ImageIcon(icon1));
myLabel.setVisible(true);
panelhauptfenster.add(myLabel);
}
}
import java.awt.*;
import javax.swing.*;
import java.net.URL;
import javax.imageio.ImageIO;
class Gui {
//Importiert Auflösung des Bildschirms
Toolkit tk = Toolkit.getDefaultToolkit();
Dimension screenSize = tk.getScreenSize();
//Setzt Variablen für die Auflösung
public int aufloesungBreite = screenSize.width;
public int aufloesungHoehe = screenSize.height;
//Setzt die Berechnung des JFrame hauptfenster Location
private int breite = aufloesungBreite/2 - 640;
private int hoehe = aufloesungHoehe/2 - 400;
public Gui() {
JFrame hauptfenster = new JFrame("Verwaltungssoftware fuer die Jobsuche");
hauptfenster.setDefaultCloseOperation(hauptfenster.EXIT_ON_CLOSE);
hauptfenster.setResizable(false);
hauptfenster.setLocation(breite, hoehe);
hauptfenster.setSize(1280,800);
hauptfenster.setLayout(new BorderLayout(5,5));
//Addet hauptpanel zum JFrame
ImagePanel hauptpanel = new ImagePanel();
hauptfenster.add(hauptpanel);
hauptpanel.setVisible(true);
hauptfenster.setVisible(true);
}
public static void main(String[] args) {
Runnable r = new Runnable() {
@Override
public void run() {
new Gui();
}
};
SwingUtilities.invokeLater(r);
}
}
class ImagePanel extends JPanel {
//Variablen
Image icon1;
//Konstruktor
public ImagePanel() {
try {
URL url = new URL("http://i.stack.imgur.com/7bI1Y.jpg");
icon1 = ImageIO.read(url);
} catch (Exception e) {
e.printStackTrace();
}
setLayout(new BorderLayout (5,5));
JLabel myLabel=new JLabel(new ImageIcon(icon1));
add(myLabel);
}
// very important!
@Override
public Dimension getPreferredSize() {
return new Dimension(icon1.getWidth(this), icon1.getHeight(this));
}
}