1

私はJavaが初めてなので、時間を割いて助けてくれてありがとう!

基本的に、作成したグラフィックの上にテキストを表示したいと考えています。基本的に私はトロフィーを作り、その上に「#1」を表示したいと考えています。

誰でもこれを行う方法を教えてもらえますか? ありがとうございました

以下は、これまでに書いたコードです。「#1」の位置はすべて設定されていますが、グラフィックの後ろに表示されていることがわかります。

import javax.swing.JApplet;
import java.awt.*; 
import java.net.*;
import javax.imageio.*;
import java.io.*;
import java.awt.Graphics2D;

public class BusinessCard extends JApplet
{

    /**
     * Paint method for applet.
     * 
     * @param  g   the Graphics object for this applet
     */
    public void paint(Graphics page)
    {
        //Variables used in rectangle
        int x = 0;
        int y = 0;
        int width = 500;
        int height = 300;



        page.drawRect(x, y, width, height);  //draws the rectangle using variables

        //Displays name
        Font f = new Font("Helvetica", Font.BOLD, 26);
        page.setFont(f);
        page.drawString ("anonymous", 300,100);

        //Displays company
        Font g = new Font("Helvetica", Font.PLAIN, 18);
        page.setFont(g);
        page.drawString ("blank", 320, 120);

        //Displays email
        Font h = new Font("Helvetica", Font.PLAIN, 15);
        page.setFont(h);
        page.drawString ("email", 315,140);

        //int for the logo
        final int MID = 350;
        final int TOP = 168;

        setBackground (Color.yellow);  //Revisit. For some reason it only turns yellow                   after you resize the window

        Font i = new Font("Helvetica", Font.BOLD, 16);
        page.setFont(i);
        page.drawString ("#1", MID+20, TOP+20);

        page.setColor (Color.orange);
        page.fillOval (MID, TOP, 60, 60); //bottom half of the trophy. the rounded part.
        page.drawArc (MID-8, TOP+15, 25, 25, 100, 160); //left arc
        page.drawArc (MID+43, TOP+15 , 25, 25, 280, 160); //right arc
        page.fillRect (MID+1, TOP+1, 59, 25); //make the top of the trophy flat basically
        page.fillRect (MID+22, TOP+60, 15, 25); //neck of the trophy
        page.drawLine (MID+48, TOP+84, MID+10, TOP+84); //base of the trophy


    }
4

3 に答える 3

1

まず、トップレベルのコンテナに直接ペイントすることはしません。のようなものを使用JPanelしてカスタムペイントを行い、それをトップレベルのコンテナに追加します。

次に、可能な限りオーバーライドを避ける必要がpaintあります。最初のポイントで提案されているようにカスタムコンポーネントを使用する場合は、paintComponent代わりに使用する必要があります。

第三に、常に呼び出しますsuper.paint(またはsuper.paintComponent、カスタムコンポーネントを使用している場合)。

第四に、他の体は正しいです。グラフィックの後にテキストを描画しようとしている必要があります...

これは私が使用したコードです:

public class BusinessCard extends JApplet {

    /**
     * Paint method for applet.
     *
     * @param g the Graphics object for this applet
     */
    public void paint(Graphics page) {

        super.paint(page);

        //Variables used in rectangle
        int x = 0;
        int y = 0;
        int width = 500;
        int height = 300;



        page.drawRect(x, y, width, height);  //draws the rectangle using variables

        //int for the logo
        final int MID = 350;
        final int TOP = 168;

        page.setColor(Color.orange);
        page.fillOval(MID, TOP, 60, 60); //bottom half of the trophy. the rounded part.
        page.drawArc(MID - 8, TOP + 15, 25, 25, 100, 160); //left arc
        page.drawArc(MID + 43, TOP + 15, 25, 25, 280, 160); //right arc
        page.fillRect(MID + 1, TOP + 1, 59, 25); //make the top of the trophy flat basically
        page.fillRect(MID + 22, TOP + 60, 15, 25); //neck of the trophy
        page.drawLine(MID + 48, TOP + 84, MID + 10, TOP + 84); //base of the trophy

        page.setColor(Color.yellow);  //Revisit. For some reason it only turns yellow                   after you resize the window

        Font font = UIManager.getFont("Label.font");

        page.setFont(font.deriveFont(Font.BOLD, 16));
        page.drawString("#1", MID + 20, TOP + 20);

        //Displays name
        page.setFont(font.deriveFont(Font.BOLD, 26));
        page.drawString("anonymous", 300, 100);

        //Displays company
        page.setFont(font.deriveFont(Font.PLAIN, 18));
        page.drawString("blank", 320, 120);

        //Displays email
        page.setFont(font.deriveFont(Font.PLAIN, 15));
        page.drawString("email", 315, 140);


    }
}

そしてそれは

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

使用しようとしているフォントがすべての人にインストールされている可能性があることに注意してください(コードによってアプレットがクラッシュしました)

于 2012-09-18T23:01:41.770 に答える
1

まず、sabre_raider が言ったことを実行します。あなたは以前にそれを望んでいましたが、他の何かも修正する必要があります

オレンジの上にオレンジを描いています。トロフィーを描き、ページの背景を黄色に設定し、「#1」をオレンジ色でもう一度描きます。に変更setBackgroundpage.setColorて、黄色で描画します (これが目的のようです)。setBackground は、アプレットの背景を設定します。これは、必要なものではなく、「#1」を黄色で描画すると想定しています。Applet背景を設定するつもりだった場合は、のメソッドで必ず設定してくださいinit!! 毎回塗り直すわけではありません。(それに加えて、初期化で setSize(500, 300) を使用して、ウィンドウをメッセージのサイズに適切にサイズ設定します)

また、それを別のメソッドに分割することをお勧めします。これにより、読みやすくなります。一般に、メソッドは次のようになります。

/**
 * Paint method for applet.
 * 
 * @param g
 *            the Graphics object for this applet
 */
public void paint(Graphics page)
{
    drawBorder( page );
    drawText( page );
    drawTrophy( page, 1 );
}

private void drawBorder(Graphics page) {
    int x = 0;
    int y = 0;
    int width = 500;
    int height = 300;

    page.setColor( Color.black );
    page.drawRect( x, y, width, height );
}

private void drawText(Graphics page) {
    // Displays name
    Font f = new Font( "Helvetica", Font.BOLD, 26 );
    page.setFont( f );
    page.drawString( "anonymous", 300, 100 );

    // Displays company
    Font g = new Font( "Helvetica", Font.PLAIN, 18 );
    page.setFont( g );
    page.drawString( "blank", 320, 120 );

    // Displays email
    Font h = new Font( "Helvetica", Font.PLAIN, 15 );
    page.setFont( h );
    page.drawString( "email", 315, 140 );
}

private void drawTrophy(Graphics page, int number) {
    final int MID = 350;
    final int TOP = 168;
    page.setColor( Color.orange );
    page.fillOval( MID, TOP, 60, 60 ); // bottom half of the trophy. the rounded part.
    page.drawArc( MID - 8, TOP + 15, 25, 25, 100, 160 ); // left arc
    page.drawArc( MID + 43, TOP + 15, 25, 25, 280, 160 ); // right arc
    page.fillRect( MID + 1, TOP + 1, 59, 25 ); // make the top of the trophy flat basically
    page.fillRect( MID + 22, TOP + 60, 15, 25 ); // neck of the trophy
    page.drawLine( MID + 48, TOP + 84, MID + 10, TOP + 84 ); // base of the trophy

    Font i = new Font( "Helvetica", Font.BOLD, 16 );
    page.setColor( Color.yellow );
    page.setFont( i );
    page.drawString( "#" + number, MID + 20, TOP + 20 );
}
于 2012-09-18T22:11:44.423 に答える
1

最初にトロフィーを描いてから、テキストを書く必要があると思います!

描画したものはすべて、コントロールの最上層に表示されます。

于 2012-09-18T22:03:05.630 に答える