【问题标题】:Image not working/ showing up while using java (JButton and JPanel)使用 java(JButton 和 JPanel)时图像不工作/显示
【发布时间】:2016-10-28 05:49:03
【问题描述】:

我尝试了无数教程并查看了无数网站(包括堆栈溢出),但没有一个代码对我有用。所以我最终问了我自己的问题,我的代码有什么问题?

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenuBar;
import javax.swing.JPanel;

public class titlescreen extends JFrame {


/**
 * 
 */
private static final long serialVersionUID = 1L; 
JPanel jp = new JPanel();
JButton jb = new JButton();



public titlescreen() throws IOException {

    JFrame f = new JFrame("MacroDom");
    //keep everything working   
    f.setTitle("Don't Read Me :P");
    f.setSize(5000, 5000);
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.setVisible(true);

    jb.setIcon(new ImageIcon("button.png"));
    jp.add(jb);
    add(jp);

    validate();

}

public static void main(String[] args) throws IOException {
    titlescreen ts = new titlescreen();
}

}

【问题讨论】:

  • 以后,请发布更多信息以帮助我们了解您的问题,包括该课程做了什么,没有做什么,您可能会看到什么错误,您还尝试过什么,并且关于您的困境的信息更少。诸如"I've tried countless tutorials and looked at countless websites (including stack overflow) but none of the code had worked for me." 之类的声明没有告诉我们任何可以帮助我们帮助您解决问题的有用信息。
  • 请浏览tour 并查看help center 部分和how to ask good questions 部分,以便您的问题和答案更好,让您未来的体验更好.
  • I've tried countless tutorials - 我建议您从错误的教程开始。您应该从 Swing 教程开始以获得更好的示例。也许关于 [如何使用标签]() 的教程将是一个很好的起点,可以作为一个图标示例。请注意代码的结构与您的代码不同(并且更好)。从工作示例开始并对其进行自定义。

标签: java swing


【解决方案1】:

您正在创建两个 JFrame,一个是类本身的对象,一个是 this,如果您愿意,您可以将 JButton 添加到其中,另一个是您显示并由变量 f 保存。解决方案:不要这样做——只创建并显示一个 JFrame,并在其中添加按钮。

我强烈建议您几乎不要扩展 JFrame。通过让您的类扩展 JFrame,您将自己画在一个角落里,迫使您创建和显示 JFrame,而通常需要更大的灵活性。事实上,我敢冒险说,我创建的大部分 Swing GUI 代码扩展了 JFrame,事实上你很少愿意这样做这。更常见的是,您的 GUI 类将用于创建 JPanel,然后可以将其放置到 JFrame 或 JDialogs 或 JTabbedPanes 中,或者在需要时通过 CardLayouts 交换。这将大大增加您的 GUI 编码的灵活性。

【讨论】:

  • 好吧,所以我摆脱了 JFrame f = new JFrame();我还删除了所有的 f.'s 。现在每当我运行程序时,我都会得到一个很小的小盒子,里面有几个点,这是否意味着我的图像太小了? (我认为它大约是 200 像素乘 300 像素或类似的东西
  • 你不应该摆脱JFrame f = new JFrame();,而是应该摆脱extends JFrameadd所有f的;)
  • 哎哟。请再次查看tour 并查看help center 部分和how to ask good questions 部分。
  • 您可能没有在正确的位置查找图像文件,“无数教程和查看无数网站(包括堆栈溢出)”会告诉您。
  • 嗯讨厌再次打扰你,但现在它给了我两个错误,“add(jp)”和“validate();”它也让我可以选择修复它们,但是当我选择快速修复并运行程序时,看不到图像。
【解决方案2】:

万岁,我发现了问题,我只是输入了错误的目录,而且我显然没有受过 java 中的 Swing 教育,感谢 cmets 中的所有帮助! (这是我的代码供参考) -

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenuBar;
import javax.swing.JPanel;

public class titlescreen extends JFrame {



private static final long serialVersionUID = 1L; 
JPanel jp = new JPanel();
JButton jb = new JButton();


public titlescreen() throws IOException {

    ImageIcon jbImage = new ImageIcon("/Users/Sammmy/Documents/workspace/Macrodom/src/button.jpg"); 
    jb = new JButton(jbImage); 

    //keep everything working   
    setTitle("MacroDom");
    setSize(5000, 5000);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setResizable(true);

    jp.add(jb);
    add(jp);

    setVisible(true);





}





public static void main(String[] args) throws IOException {

    new titlescreen();
}


}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多