1

テキストとして割り当てられている Label2 が Jframe に表示されないという問題が発生しています。画像として設定した他のラベルが重なっていると思いますか?それが問題である場合、どうすれば修正できますか?

import java.awt.Dimension;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingUtilities;

public class Generator extends JFrame {

    private static final long serialVersionUID = 1L;

    /**
     * Launch the application.
     */
    public static void main(final String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    final Generator frame = new Generator();
                    frame.setVisible(true);
                } catch (final Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public Generator() {
        /*
         * @Images/Text
         */
        final ImageIcon icon = new ImageIcon("data/hover_a.png");
        final JLabel label = new JLabel(icon);

        final ImageIcon icon1 = new ImageIcon("data/background.png");
        final JLabel label1 = new JLabel(icon1);

        final ImageIcon img = new ImageIcon("data/icon.png");

        final JLabel label2 = new JLabel("Test Text");

        /*
         * @Image/Text Bounds
         */
        label.setBounds(24, 266, 240, 40);
        label1.setBounds(0, 0, 289, 330);
        label2.setBounds(0, 0, 80, 15);

        /*
         * @Image Hovers
         */
        label.addMouseListener(new MouseAdapter() {

            @Override
            public void mouseEntered(final MouseEvent evt) {
                label.setIcon(new ImageIcon("data/hover_b.png"));
            }

            @Override
            public void mouseExited(final MouseEvent evt) {
                label.setIcon(new ImageIcon("data/hover_a.png"));
            }

        });

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setPreferredSize(new Dimension(295, 358));
        setTitle("test");
        getContentPane().setLayout(null);
        setResizable(false);
        setVisible(true);
        setIconImage(img.getImage());
        getContentPane().add(label);
        getContentPane().add(label1);
        getContentPane().add(label2);
        pack();
    }
}
4

2 に答える 2

2

コードを読んだところ、画像を重ねようとしているようです。これは、カスタムペイントで顧客パネルを使用することではるかにうまく達成されます

カスタムペインティングのレッスンと2Dグラフィックストレイルの実行をご覧ください

何を達成したいのか正確にわからない場合は、背景をペイントする背景パネルを作成してから、レイアウトマネージャーを使用して他の2つのアイコンをレイアウトします(個人的にはGridBagLayoutを使用しましたが、あなたが必要です)

また、コンポーネントの塗装順序についてもよく理解します。

于 2012-07-30T02:00:32.517 に答える
2

setVisible(true)すべてのコンポーネントを追加する前に呼び出しています。これをしないでください。順序は次のとおりです。

  • コンポーネントを追加する
  • 電話pack()
  • 電話setVisible(true)
  • revalidate()後で変更を加えてからコンテナを呼び出すと、repaint()
于 2012-07-30T02:23:02.543 に答える