3

私は次のコードを持っています:

try {
        File file_background = new File(
                "C:\\Users\\xxxx\\Desktop\\background.png");
        ImageIcon icon_background = new ImageIcon(
                ImageIO.read(file_background));
        JLabel background = new JLabel(icon_background);
        window.setContentPane(background);

        File file_car = new File(
                "C:\\Users\\xxxxxx\\Desktop\\car.png");
        ImageIcon icon_car = new ImageIcon(ImageIO.read(file_car));

        JLabel car = new JLabel(icon_car);
        car.setVisible(true);

        background.add(car);
        // TODO Get car showing on top of the background label

    } catch (IOException e) {

        e.printStackTrace();
    }

背景ラベルのTOPに車のラベルを表示させようとしているところ。しかし、私は背景のJLabelを表示しているだけです。SWINGは初めてなので、足りないステップについての提案は素晴らしいと思います。

4

3 に答える 3

4

..後の段階で動かしたい。しかし、今は最初に表示したいです:)

2つの方法があります。

1日

  • の代わりJLabel car に、を使用してJPanel描画します(利点は、の適切な通知を含むコンテナです)。ImagepaintComponentJLabel backgroundJPanelLayoutManager

  • に入れますが、実装していないので、desiredJLabel car を設定する必要があります。JLabel backgroundJLabelLayoutManager

    1. のすべての画像JLabelが静的であり、と比較してCPUとGPUが広告の消費に影響を与えないという利点がありますpaintComponent
    2. 不利な点JLabelはコンテナではなく、の適切な通知があれば、配置された ものLayoutManagerと比較してさらにいくつかのコードローンが必要です。移動(AbsoluteLayout)は非常に優れたソリューションです。JLabelJPanel

2位。

BufferedImageとGraphicsImagesの両方を使用して描画します。

于 2012-11-20T14:30:09.907 に答える
3

OverlayLayoutを使用するJPanelに両方を追加します。JLabel別のにを追加することはできませんJLabel

このコードはコンパイラを通過していないので、それが何であるかを理解してください:)

JPanel panel = new JPanel(new OverlayLayout());
panel.add(background);
panel.add(car);
于 2012-11-20T14:20:33.490 に答える
0

Works..表示するために以下を追加しました。

car.setBounds(200, 200, 200, 200);

どうやらそれはデフォルトでnullレイアウトマネージャーが使用されているためです。したがって、デフォルトのサイズは0であるため、ラベルの境界を設定すると、ラベルを表示できるようになります。

于 2012-11-20T14:20:04.287 に答える