Java Applet рисует клипы на [195,200], несмотря на изменение размера - PullRequest
2 голосов
/ 31 мая 2011

Намерение

У меня есть java.applet.Applet подкласс MyApplet с добавленным java.awt.Canvas подклассом MyCanvas.

Мой код изменяет размер MyApplet на new Dimension(600,400) и изменяет размер MyCanvas для соответствия.

Когда MyCanvas равен paint ed, он должен

  1. заполните всю область красным
  2. Нарисуйте синий круг шириной 300 и высотой 300.

Задача

Вместо этого (при запуске в виде Java-апплета из Eclipse) краска MyCanvas обрезается до гораздо меньшей области, чем 600 400 (я измерил ее равной 195 200), даже если MyApplet изменяет размер правильно. Вот как это выглядит.

enter image description here

Распечатки тоже в порядке - см. Нижнюю часть сообщения.

Код

Это мой код:

import java.applet.Applet;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Graphics;

public class MyApplet extends Applet {

    Canvas mainCanvas;

    public void init() {

        // Set the size of the applet
        setSize(600, 400);

        // Print dimensions
        System.out.println("Applet dimensions: " + getSize());

        // Make a canvas with the same sizes as this applet
        mainCanvas = new MyCanvas(getWidth(), getHeight());
        add(mainCanvas);
    }

    public class MyCanvas extends Canvas {

        public MyCanvas(int w, int h) {

            setSize(w, h);

            System.out.println("Canvas dimensions: " + getSize());
        }

        public void paint(Graphics g) {

            g.setColor(Color.RED);
            System.out.println("Canvas dimensions when painting: " + getSize());
            g.fillRect(0, 0, getWidth(), getHeight());
        }
    }
}

Отпечатки

Создает следующую распечатку:

Applet dimensions: java.awt.Dimension[width=600,height=400]
Canvas dimensions: java.awt.Dimension[width=600,height=400]
Canvas dimensions when painting: java.awt.Dimension[width=600,height=400]
Canvas dimensions when painting: java.awt.Dimension[width=600,height=400]

Размеры правильные во всем!

Попытки решения

  • Я попытался setBounds() вместо setSize() в MyApplet и MyCanvas на всякий случай, если позиция была смещена к верхнему левому углу. Это просто сместило круг - клип сохранился.

Я что-то упустил?

Ответы [ 3 ]

3 голосов
/ 31 мая 2011

В первой строке вашей инициализации поместите это:

setLayout(new GridLayout(1,1));   

Это заставит ваш холст занять все пространство вашего апплета.

1 голос
/ 31 мая 2011

Вы хотите звонить setPreferredSize и , это объясняет различия

0 голосов
/ 01 июня 2011

Наконец-то нашел!

Среда , которую Eclipse предоставляет апплетам, по умолчанию настроена на размер 200, 200. Все клипы рисования в этой области, кроме Конфигурация выполнения по умолчанию изменено.

Это можно сделать следующим образом:

  1. Щелкните правой кнопкой мыши корневую папку вашего апплета в пакете view
  2. Выбрать Запуск от имени ... -> Запуск конфигураций ...
  3. Нажмите вкладку Параметры
  4. Измените Ширина и Высота поля по мере необходимости.
...