оператор setBackground не работает? - PullRequest
3 голосов
/ 08 февраля 2012
import javax.swing.JApplet;
import java.awt.*;

public class Snowman extends JApplet {
//---------------------------------------------
// Draws a snowman.
//---------------------------------------------
public void paint (Graphics page)
{
    final int MID = 150;
    final int TOP = 50;

    setBackground (Color.cyan);

    page.setColor(Color.blue);
    page.fillRect(0, 175, 300, 50); // ground

    page.setColor (Color.yellow);
    page.fillOval (-40, -40, 80, 80); // sun

    page.setColor (Color.white);
    page.fillOval (MID-20, TOP, 40, 40); // head
    page.fillOval (MID-35, TOP+35, 70, 50); // upper torso
    page.fillOval (MID-50, TOP+80, 100, 60); // lower torso

    page.setColor (Color.black);
    page.fillOval(MID-10, TOP+10, 5, 5);
    page.fillOval(MID+5, TOP+10, 5, 5);

    page.drawArc(MID-10, TOP+20, 20, 10, 190, 160); // smile

    page.drawLine (MID-25, TOP+60, MID-50, TOP+40); // left arm
    page.drawLine (MID+25, TOP+60, MID+55, TOP+60); // right arm

    page.drawLine (MID-20, TOP+5, MID+20, TOP+5); // brim of hat
    page.fillRect(MID-15, TOP-20, 30, 25); // top of hat
}
}

Это весь код. SetBackground указывается после того, как я объявляю две последние переменные, заранее спасибо, я получил этот код из книги «Java Software Solutions», я просматривал его снова и снова, и не повезло: / спасибо заранее:)

Ответы [ 5 ]

5 голосов
/ 08 февраля 2012

Snowman image

//<applet code='Snowman' width=300 height=200></applet>
import javax.swing.*;
import java.awt.*;

public class Snowman extends JApplet {
//---------------------------------------------
// Draws a snowman.
//---------------------------------------------
    public void init() {
        add(new SnowmanPanel());
        validate();
    }
}

class SnowmanPanel extends JPanel {

    final int MID = 150;
    final int TOP = 50;

    SnowmanPanel() {
        setBackground (Color.cyan);
    }

    public void paintComponent(Graphics page)
    {
        super.paintComponent(page);

        page.setColor(Color.blue);
        page.fillRect(0, 175, 300, 50); // ground

        page.setColor (Color.yellow);
        page.fillOval (-40, -40, 80, 80); // sun

        page.setColor (Color.white);
        page.fillOval (MID-20, TOP, 40, 40); // head
        page.fillOval (MID-35, TOP+35, 70, 50); // upper torso
        page.fillOval (MID-50, TOP+80, 100, 60); // lower torso

        page.setColor (Color.black);
        page.fillOval(MID-10, TOP+10, 5, 5);
        page.fillOval(MID+5, TOP+10, 5, 5);

        page.drawArc(MID-10, TOP+20, 20, 10, 190, 160); // smile

        page.drawLine (MID-25, TOP+60, MID-50, TOP+40); // left arm
        page.drawLine (MID+25, TOP+60, MID+55, TOP+60); // right arm

        page.drawLine (MID-20, TOP+5, MID+20, TOP+5); // brim of hat
        page.fillRect(MID-15, TOP-20, 30, 25); // top of hat
    }
}

Общие рекомендации.

  • Не рисуйте в компоненте Swing верхнего уровня.Вместо этого переместите пользовательскую картину в JPanel или JComponent и рисуйте там.Для пользовательского рисования в последнем случае переопределите paintComponent(Graphics)
  • При выполнении пользовательского рисования не забудьте вызвать super.paintComponent(Graphics)
  • Установить цвет в конструкторе (или init()), а не вметод рисования.

Другие советы

  • Для статического изображения вы также можете нарисовать его в BufferedImage и поместить изображение в ImageIcon в JLabel.Что проще.
  • Если эта книга поторопилась с созданием апплетов, отбросьте ее.Апплеты намного сложнее, чем стандартные приложения, и не должны быть использованы новичками.
3 голосов
/ 08 февраля 2012

Попробуйте этот код

import java.awt.*;
import javax.swing.JApplet;

public class SnowMan extends JApplet
{

    public SnowMan()
    {
        setBackground(Color.cyan);
    }
//---------------------------------------------
// Draws a snowman.
//---------------------------------------------


    @Override
    public void paint(Graphics page)
    {
        final int MID = 150;
        final int TOP = 50;



        page.setColor(Color.blue);
        page.fillRect(0, 175, 300, 50); // ground

        page.setColor(Color.yellow);
        page.fillOval(-40, -40, 80, 80); // sun

        page.setColor(Color.white);
        page.fillOval(MID - 20, TOP, 40, 40); // head
        page.fillOval(MID - 35, TOP + 35, 70, 50); // upper torso
        page.fillOval(MID - 50, TOP + 80, 100, 60); // lower torso

        page.setColor(Color.black);
        page.fillOval(MID - 10, TOP + 10, 5, 5);
        page.fillOval(MID + 5, TOP + 10, 5, 5);

        page.drawArc(MID - 10, TOP + 20, 20, 10, 190, 160); // smile

        page.drawLine(MID - 25, TOP + 60, MID - 50, TOP + 40); // left arm
        page.drawLine(MID + 25, TOP + 60, MID + 55, TOP + 60); // right arm

        page.drawLine(MID - 20, TOP + 5, MID + 20, TOP + 5); // brim of hat
        page.fillRect(MID - 15, TOP - 20, 30, 25); // top of hat
    }
}
1 голос
/ 08 февраля 2012

Я думаю, вам нужно использовать, getContentPane (). SetBackground ()

1 голос
/ 08 февраля 2012

Метод paint(Graphics) используется только для рисования параметра (в вашем случае page).Цвет фона апплета приложения уже был обработан на этом этапе.

Именно поэтому вы можете решить проблему, установив его в конструкторе:

public Snowman()
{
    this.setBackground(Color.cyan);
}
1 голос
/ 08 февраля 2012
setBackground (Color.cyan);

Он работает правильно в моей IDE. Я также изменил цвет фона. Работает хорошо и правильно. Не нужно менять код. Убедитесь, что вы создаете класс.

...