1

MicrosoftWordのコンポーネントのような素敵なコンポーネントを作成したいJavaSwingアプリケーションがあります。Microsoft Wordでは、次のようにドキュメントの余白を変更できます。 ここに画像の説明を入力してください

ここでの秘訣は、上部の余白を(たとえば)1.5 "に変更すると、プレビュー画像が変更されてこれが表示されるため、画像内で線が少し下に移動して、余白の変更を表示し、ユーザーができるようにすることです。この変更によって彼のドキュメントがどの程度影響を受けるかを感じてください。たとえば、左マージンを(4.0 ")に変更すると、画像は次のようになります。

ここに画像の説明を入力してください

私がしたことは、これらの2つの画像のように、2つの画像を空白のページ画像と線のみを含む別の画像(線画像)を作成することです:

ここに画像の説明を入力してください ここに画像の説明を入力してください

各画像をJLabelに重ねて挿入し、JSpinnerの上部マージン値を変更すると、「空白ページ」の画像は固定されたままですが、「線の画像」の境界線を変更して少し下に移動します。このトリックは上マージンではうまく機能しましたが、下/右/左マージンを変更すると動作が完全に悪くなります。

JSpinnerの値を変更するときに適用するコードは次のとおりです。

private void marginSpinnerStateChanged() {
    //1. Get the approximate values of all margins :
        int topMargin = (int)( Float.valueOf( topSpinner.getValue().toString() ) * 8 );
        int bottomMargin = (int)( Float.valueOf( bottomSpinner.getValue().toString() ) * 8 );
        int leftMargin = (int)( Float.valueOf( leftSpinner.getValue().toString() ) * 8 );
        int rightMargin = (int)( Float.valueOf( rightSpinner.getValue().toString() ) * 8 );

    //2. Apply all specified margins to the lines label : 
        linesLabel.setBorder( new EmptyBorder( topMargin, leftMargin, bottomMargin, rightMargin ) );
}

これを正しく機能させるために私を助けてくれませんか?

4

2 に答える 2

1

紙の上に画像を描画し、画像を拡大縮小するだけです。したがって、JComponentのpaintComponent()メソッドをオーバーライドして、次のようなことを行います。

g.drawImage(image, x, y, width, height, null);

x-左マージンになります
y-上マージン
幅になります-(maxWidth-leftMargin-rightMargin)
になりますheight-(maxHeight-topMargin-bottomMargin)になります

画像の拡大縮小が気に入らない場合は、いつでもBufferedImageを使用してから、getSubImage(...)メソッドを使用して、ペイントする目的のサイズの画像を取得できます。

于 2011-09-28T20:26:43.933 に答える
1

お気づきの方もいらっしゃると思いますが、テキスト画像はシフトしません。代わりに、半分しか表示されません。これは単純な画像操作です。良い例については、これを参照してください。

于 2011-09-28T19:55:26.120 に答える