1

私はここ数週間Javaを学んでいますが、JFrameに背景画像を適用することに関しては本当に行き詰まっています。私が遭遇したすべてのチュートリアルは、私が行うようにフレームを作成するわけではありません(私はJFrameを拡張します)。

以下のコードは私自身のプロジェクトからのものなので、これまでに学んだことを実践するのに役立ちます。以下のコードに基づいて、何をどこに追加するかを説明してください。フレームの背景として画像を使用できますか?

私が本当に感謝していることの1つは、物事がどのように機能するのか、なぜ必要なのか、実際に何をしているのかを説明できるかどうかです。 。説明が深ければ深いほど良い。ひいきに聞こえても。

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

class MiniPad extends JFrame implements ActionListener {

    JPanel pan = new JPanel();
    ClassLoader ldr = this.getClass().getClassLoader();
    ImageIcon closeImg = new ImageIcon(ldr.getResource("\\images\\buttons\\closeBtn.png"));
    JTextArea note = new JTextArea("", 6, 21);
    JScrollPane notes = new JScrollPane(note);
    JButton close = new JButton(closeImg);

    public static void main(String[] args) {
        MiniPad padgui = new MiniPad();
    } //Instance of GUI

    public MiniPad() {
        super("Notepad");
        setSize(265, 191);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        add(pan);
        setVisible(true);
//Specifications
        note.setLineWrap(true);
        note.setWrapStyleWord(true);
        notes.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
        close.setBorderPainted(false);
        close.setContentAreaFilled(false);
        close.setOpaque(false);
//Adding to JPanel 'pan'
        pan.add(notes);
        pan.add(close);
        close.addActionListener(this);
    }

    public void actionPerformed(ActionEvent event) {
        if (event.getSource() == close) {
            setVisible(false);
        }
    }
}
4

2 に答える 2

3

タイトル通りの質問について

カスタムComponent(など)を設定し、メソッドJPanelをオーバーライドする必要がありますpaintComponent

を見てみましょう

ここで、いくつかの問題が発生します。メモペインは背景の大部分をブロックし、画像を覆い隠します。これは試してみることを思いとどまらせるべきではありません;)

Swingコンポーネントを透明にする方法についてもよく理解しておく必要があります。

いくつかのフィードバック;)

私はあなたがそれを使用している目的のために、への参照を保持する必要はないと思いますClassloader、それはあなたのコードに重みと複雑さを加えるだけです。これは大きな問題ではありませんが、私の最初の質問は、「彼はクラスローダーを何に使用しているのですか??」でした。

おそらく、ある種の命名規則も採用するでしょう。一般的に、もう少し冗長にすると、コードを理解しやすくなります。

close?? それは行動ですか?たぶん「closeButton」のようなものかもしれませんが、少なくとも私はそれが何らかのタイプのボタンであることを知っています

于 2012-08-07T21:22:25.607 に答える
2

使用する方が良い:

ImageIcon closeImg = new ImageIcon(getClass().getResource("\\images\\buttons\\closeBtn.png"));

クラスファイルが出力される場所と同じ場所に画像が配置されていることを確認してください。

また、閉じるボタンが呼び出されますsetVisible(false)が、リソースを破棄したり、アプリケーションを終了したりすることはありません。

于 2012-08-07T20:59:02.577 に答える