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

私が見た2つの問題:

  1. label.setIcon(image) を使用していますが、ラベルに値を設定していません
  2. 画像は、new ImageIcon("commando.jpg) ではなく、new ImageIcon(imgStr) である必要があります。
于 2012-08-08T21:00:30.423 に答える
1
  • JLabel label;初期化されていませんJLabel label = new JLabel();

  • JLabelコンテナに追加されていない場合、コードは GUI に何も表示されません

  • の代わりにStandard LayoutManagerを使用しますsetBounds()

  • JTextAreaにJScrollPaneを使用する

于 2012-08-08T21:05:58.067 に答える
1

コードをスキャンしましたが、作成中 (または追加中) の場所が見つかりませんlabel。プログラムを実行してもエラーが発生しないと仮定すると、コード スニペットが不完全であることが示唆されます。

labelが作成され、画面のどこかに追加されていることを確認してください。

invalidateandへの呼び出しrepaintもおそらく役立つでしょうが、動作するコード サンプルがないと確実にすることは困難です。

人々が null レイアウト マネージャーの使用を主張する理由はわかりませんが、最初にレイアウト マネージャーを使用してテストを行うことをお勧めします。これにより、少なくともコンポーネントが正しくレイアウトされていないという疑いが取り除かれます。

于 2012-08-08T21:09:26.640 に答える
1

..これは、Java パッケージと同じフォルダーにあります。

この単純なステートメントは、問題の根底にあるかもしれない多くの誤解を示しています。

  1. クラス ファイルは、必ずしもソース ファイルと同じディレクトリにあるとは限りません。
  2. ZipEntryクラス ファイルは、Jar 内にある可能性があります。
  3. 「フォルダ」は非常に画面ベースの概念であり、ディスク上のディレクトリを「ディレクトリ」(および zip エントリを zip エントリ) と考える方が適切です。
  4. ディレクトリまたは zip エントリの観点からパッケージを考えないでください。どちらかに当てはまるかもしれませんが、また別物です。

画像にアクセスする方法は重要な問題になります。画像はアプリケーション リソースですか?

アプリなら。簡単に配布できるように、「組み込みアプリケーション リソース」として Jar に含める必要があります。これらは によってアクセスされURLます。

アプリなら。画像を含むディレクトリへのハードコーディングされたパスで十分です。コンストラクターにString引数を渡すことにより、そのパスに基づく必要があることを示しますが、「相対パス」はほとんど機能しません (開発者が..現在のディレクトリからの相対パスでイメージを利用できるようにするために特別な努力をしない限り) )。代わりに、画像を含むディレクトリへの絶対パスをハードコーディングし、実行時に画像ファイル名を追加することをお勧めします。ImageIconFile


コードには他にも多くのエラーがあり、それらは主に他の回答で対処されていますが、繰り返します。 レイアウトを使用して、コンポーネントのサイズと配置を管理します。

ボタンの束よりも優れているように思えJTableます。JList

于 2012-08-10T00:11:44.093 に答える