(Java GUI)通过方法调用将JLabel设置为包含ImageIcon?

时间:2016-01-06 22:15:11

标签: java swing user-interface nullpointerexception imageicon

我是初学程序员,所以这是一个初学者问题/项目。我有一个名为Screen的类,它是一个用JTabbedPane制作的简单GUI,所有选项卡都是空白的。在第一个选项卡中," actionPanel",我有一个简单的JLabel,其中包含文本"这是一个测试。"这个JLabel称为dA,还有第二个空的称为dB。

我还有一个类,字符,用于具有参数名称,HP的对象,以及该字符对应图像的位置的URL。

我希望能够调用一个方法setupDialogueEnvironment(),这个方法到目前为止只应该更改由Screen创建的JLabel以包含一个字符的相应图像而不是& #34;这是一项测试。" 但是,当我尝试执行此操作时,我一直收到空指针异常。我相信这与我正在使用的java.net.URL或者ImageIcons有关。我不确定。我知道JLabel确实出现了它只是说"这是一个测试",所以它与图像无关。

我想知道我是不是正确使用了repaint()方法。您将在我的代码中看到我尝试在每个JComponent上调用repaint(),我可以看看它是否有用,但事实并非如此。在调用方法setupDialogueEnvironment()之后,我的屏幕仍显示"这是测试。"

提前感谢您的帮助。这是我的代码,我将澄清下面代码的几点。

package Package1;
import javax.swing.*;
import java.awt.*;
import java.net.URL.*;
public class Screen {

    // Global declaration of GUI elements
    JFrame frame;
    static JPanel actionPanel, onPerson, wt, mats, craft, quests, notes;
    static JTabbedPane mtp, inventory;

    // Image URLs and their corresponding ImageIcons and JLabels
    static JLabel dA = new JLabel("THIS IS A TEST");
    static JLabel dB = new JLabel() ; // dialogue member A's and B's JLabels
    static ImageIcon diA = new ImageIcon();
    static ImageIcon diB = new ImageIcon(); // ImageIcons for dialogue members A and B

    public Screen()
    {
        // Set up the frame

        // Create tabbed panes and panels

        // Add tabs to JTabbedPanes

        // Finalize some JFrame things, like setDefaultCloseOperation

    }

    // the method in question
    public void setupDialogueEnvironment(URL urla, URL urlb)
    {
        diA = new ImageIcon(urla);
        diB = new ImageIcon(urlb);

        dA.setBackground(Color.RED);
        dB.setBackground(Color.BLUE);

        dA = new JLabel(diA);
        dB = new JLabel(diB);

        actionPanel.add(dA);
        actionPanel.add(dB);

        dA.setSize(300, 300);
        dB.setSize(300, 300);

        dA.setLocation(100, 100);
        dB.setLocation(600, 100);

        dA.setVisible(true);
        dB.setVisible(true);

        //repaint-- how do I get it to work?
        frame.repaint();
        actionPanel.repaint();
        mtp.repaint();
        dA.repaint();
        dB.repaint();

    }
}
  • 我有一个名为HomesteadRunner的类,它包含我的main方法并创建一个Screen对象
  • 在HomesteadRunner中我有一个对象DialogueState,它调用一个方法,其唯一目的是调用Screen对象上的setupDialogueEnvironment()。
  • 我制作了两个Character对象,每个对象都有正确复制的相应图像文件路径。这个代码如下。

    import package1.*;
    public class HomesteadRunner {
    public static void main(String[] args)
    {
        // Create characters and attack. See if HP adjusts properly.
        Skills skiller = new Skills();
    
        Screen screen = new Screen();
    
        Character ca = new Character("Bob", 100, Screen.class.getResource("C:\\Users\\jleekas\\IdeaProjects\\HomesteadV1\\src\\Resources\\imgres.jpg"));
        Character cb = new Character("Billy", 100, Screen.class.getResource("C:\\Users\\jleekas\\IdeaProjects\\HomesteadV1\\src\\Resources\\imgres-1.jpg"));
    
        // Create a dialogue state
        DialogueState ds = new DialogueState();
        ds.setup(ca, cb, screen);
    }
    

    }

非常感谢你的帮助和帮助。提前建议。

0 个答案:

没有答案