0

私は日食と Google の WindowBuilder Pro プラグインを使用して、swing アプリケーションを設計しています。グループ レイアウトを使用して、完全に機能する JFrame とそのコンポーネントを既に構築しました。現在、すべての JFrame の隅に画像を追加しようとしています。WindowBuilder Pro プラグインからドラッグ アンド ドロップを試みると、すべてのコンポーネントと JFrame 自体が移動およびサイズ変更されます。

これらの画像をプログラムまたはドラッグ/ドロップのいずれかでフレームの隅に配置し、そこに固定して、JFrame のサイズが変更されたときに画像がそれぞれの隅にとどまるようにする方法はありますか?

私が試したプログラムコード:

BufferedImage image = ImageIO.read(getClass().getResource("image path"));
JLabel label = new JLabel(new ImageIcon(image));
label.setBounds(0,0,100,100);
add(label);

これは左上隅にはうまく機能しますが、他の画像を他の隅に固定する方法がわかりません。

よろしくお願いします!!!

編集:既存のすべてのコンポーネントをそのままにして、既存のすべてのコンポーネントの背後にある JFrame の隅に画像を埋め込んでください。

4

3 に答える 3

2

null レイアウトと setBounds() を使用しないでください!!! 適切なレイアウト マネージャーを使用します。

たとえば、JFrame のデフォルトのレイアウト マネージャーは BorderLayout です。したがって、BorderLayout も使用する 2 番目の JPanel を作成できます。次に、パネルの WEST と EAST に画像を追加できます。次に、パネルをフレームの北に追加します。

詳細については、ボーダー レイアウトの使用方法を参照してください。実際には、レイアウト マネージャーに関するセクション全体を読んでください。

于 2013-04-26T19:35:01.203 に答える
0

メソッドを使用している場合は、ラベルに指定した場所が最終的な場所であり、フレームに追加してメソッドを呼び出すまで変更できないことsetBoundsを知っておく必要があります。フレームのサイズを変更するたびに、新しい場所を設定する必要がありますラベル用。componentListenercomponentResized

ただし、これはこの問題の最善の方法ではありません。この方法を使用しないでください。他の人 (または Expert )が別のより良い答えを出すことを願っています。

とにかく、この例を見ることはできません:

    private JLabel lable ;
    private Icon img;
   // default constructor 
    public AnchoreImage(){

        setVisible(true);
        setDefaultCloseOperation(3);

        img = new ImageIcon(AnchoreImage.class.getClass().getResource("/path to image"));
        lable = new JLabel("text",img, JLabel.LEADING);
        lable.setBounds(getWidth()-img.getIconWidth(), 20, img.getIconWidth(),img.getIconWidth());
        add(lable);
        addComponentListener(new ComponentAdapter() {

            @Override
            public void componentResized(ComponentEvent e) {
                lable.setLocation(getWidth()-(img.getIconWidth()+20), 20);
            }
        });
        pack();
        setSize(400,400);
        setLayout(null);
    }
于 2013-04-26T19:35:20.343 に答える