0

如果可能的话,你能帮我吗?我正在做自己的小“电影”项目,同时尝试学习 Java。

我设法创建了一个 JLabel,当单击按钮时它会显示我的文本,它基本上是关于我最喜欢的电影的。因此,当我单击 Commando 按钮时,会弹出一个简短的概要。所以我决定添加一个图像,它位于我的 Java 包所在的同一文件夹中。

我研究了如何应用我的图像,以便它与文本同时显示,但它似乎不起作用。我还有很多东西要学,任何指导将不胜感激!!

提前感谢您的帮助!!;]

达兹。

import java.awt.BorderLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextPane;
import java.awt.event.*;
import javax.swing.ImageIcon;

public class Movies {
    JFrame frame;
    JLabel label;

    public static void main(String []args){
            Movies gui = new Movies();
            gui.go();
    }

    public void go(){
        frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JButton commandoButton = new JButton("Commando");
        commandoButton.addActionListener(new LabelListener());
        frame.setLayout(null); // equivalent to frame.getContentPane().setLayout(null);
        frame.add(commandoButton); // equivalent to frame.getContentPane().add(button);
        commandoButton.setBounds(10, 10, 150, 25);

        JButton predatorButton = new JButton("Predator");
        predatorButton.addActionListener(new LabelListenerA());
        frame.setLayout(null); // equivalent to frame.getContentPane().setLayout(null);
        frame.add(predatorButton); // equivalent to frame.getContentPane().add(button);
        predatorButton.setBounds(10, 40, 150, 25);

        JButton expendablesButton = new JButton("The Expendables");
        expendablesButton.addActionListener(new LabelListenerB());
        frame.setLayout(null); // equivalent to frame.getContentPane().setLayout(null);
        frame.add(expendablesButton); // equivalent to frame.getContentPane().add(button);
        expendablesButton.setBounds(10, 70, 150, 25);

        frame.getContentPane().add(BorderLayout.WEST, commandoButton);
        frame.setSize(1000, 350);
        frame.setVisible(true);
    }

    JTextPane labelCommando = new JTextPane();
    class LabelListener implements ActionListener {
        public void actionPerformed(ActionEvent commandoButton){            
            labelCommando.setText("A retired elite Black Ops Commando launches a one man war against a group of South American criminals who have kidnapped his daughter to blackmail him into starting a revolution and getting an exiled dictator back into power. ");
            frame.add(labelCommando);
            labelCommando.setBounds(170, 10, 500, 200);
            labelCommando.setOpaque(false);
            String imgStr = "images/commando.jpg";
            ImageIcon image = new ImageIcon("commando.jpg");
            JLabel labelCommando = new JLabel(" ", image, JLabel.CENTER);
            label.setIcon(image);
        }
    } // Close inner class

    class LabelListenerA implements ActionListener {
        public void actionPerformed(ActionEvent predatorButton){            
            labelCommando.setText("Not long after they land, Dutch and his team discover    that they have been sent under false pretenses. This deception turns out to be the least of their worries though, when they find themselves being methodically hunted by something not of this world...");
            frame.add(labelCommando);
            labelCommando.setBounds(170, 10, 500, 200);
            labelCommando.setOpaque(false);
        }
    } // Close inner class

    class LabelListenerB implements ActionListener {
        public void actionPerformed(ActionEvent expendablesButton){

            labelCommando.setText("Barney Ross leads the 'Expendables', a band of highly  skilled mercenaries including knife enthusiast Lee Christmas, martial arts expert Yin Yang, heavy weapons specialist Hale Caesar, demolitionist Toll Road and loose-cannon sniper Gunner Jensen. When the group is commissioned by the mysterious Mr. Church to assassinate the merciless dictator of a small South American island, Barney and Lee head to the remote locale to scout out their opposition. Once there, they meet with local rebel Sandra and discover the true nature of the conflict engulfing the city. When they escape the island and Sandra stays behind, Ross must choose to either walk away and save his own life - or attempt a suicidle rescue mission that might just save his soul.");
            frame.add(labelCommando);
            labelCommando.setBounds(170, 10, 500, 200);
            labelCommando.setOpaque(false);
        }
    } // Close inner class
}
4

4 回答 4

1

我已经扫描了您的代码,找不到您正在创建(或添加)的任何地方label,现在假设您在运行程序时没有收到任何错误,这表明代码片段不完整。

确保label已创建并添加到屏幕的某个位置。

调用invalidateandrepaint可能也会有所帮助,但如果没有有效的代码示例,就很难确定。

我不知道为什么人们坚持使用空布局管理器,但我建议首先使用布局管理器进行测试,这至少消除了组件没有正确布局的怀疑。

于 2012-08-08T21:09:26.640 回答
1

我见过的两个问题:

  1. 您正在使用 label.setIcon(image),但您没有为标签设置值
  2. 图像应该是 new ImageIcon(imgStr) 而不是 new ImageIcon("commando.jpg)
于 2012-08-08T21:00:30.423 回答
1
  • JLabel label;未初始化必须JLabel label = new JLabel();

  • JLabel未添加到容器中,则 GUI 中不显示任何代码

  • 使用标准 LayoutManager而不是setBounds()

  • JScrollPane用于JTextArea

于 2012-08-08T21:05:58.067 回答
1

..它位于我的 Java 包所在的同一文件夹中。

这个简单的陈述表明了许多可能是问题根源的误解。

  1. 类文件不一定与源文件位于同一目录中。
  2. 类文件现在可能ZipEntry在 Jar 中。
  3. “文件夹”是一个非常基于屏幕的概念,最好将磁盘上的目录视为“目录”(并将 zip 条目视为 zip 条目)。
  4. 不要根据目录或 zip 条目来考虑包。它可能变得相关,但又是另一回事。

如何访问图像归结为一个重要问题。图像是应用程序资源吗?

如果应用程序。适用于除您之外的任何人,它们应该作为“嵌入式应用程序资源”包含在 Jar 中以便于分发。这些由 访问URL

如果应用程序。仅供您使用,包含图像的目录的硬编码路径就足够了。通过将String参数传递给ImageIcon构造函数,我们表明我们想要一个File基于该路径的路径,但“相对路径”很少起作用(除非开发人员特别努力确保图像在相对于 ..current 目录的路径上可用)。相反,最好硬编码包含图像的目录的绝对路径,然后在运行时添加图像文件名。


代码中还有许多其他错误,这些错误大多已在其他答案中得到解决,但又一次。 使用布局来管理组件的大小和定位。

它似乎JTableJList比一堆按钮更好。

于 2012-08-10T00:11:44.093 回答