При изменении размера окна апплета размер холста не меняется

Для моего класса CS11 мне нужно написать небольшой апплет, который рисует на экране горизонтальную и вертикальную линии, пересекающиеся в середине холста. Одна часть назначения состоит в том, чтобы иметь возможность перемещать одну или обе строки, когда пользователь щелкает строку и выполняет перетаскивание. Эта часть работает.

Вторая часть связана с изменением размера окна. Если размер окна изменяется, две линии необходимо отрегулировать так, чтобы они простирались от края до края окна.

Наши инструкции требуют, чтобы мы использовали средство просмотра апплетов Java вместо веб-браузера для запуска программы, чтобы можно было изменять размер окна во время работы программы. Нам говорят использовать следующий файл .html.

ResizableBallController.html

<html>
  <body>
    <applet
      code="ResizableBallController.class"
      archive="objectdraw.jar"
      width="500"
      height="500">
    </applet>
  </body>
</html>

Когда я запускаю программу и изменяю размер окна, область холста остается фиксированной и составляет 500x500 пикселей, даже когда я увеличиваю окно, а увеличенная область заполняется серым цветом. По словам моего инструктора, холст должен автоматически регулироваться, чтобы простираться от края до края окна с новым размером.

Чтобы проверить проблему, я перегружаю метод paint, чтобы добавить сообщение System.out.println, чтобы я мог видеть, как часто он вызывается, и он появляется только тогда, когда метод вызывается, когда программа запускается.

Мне интересно, может ли это иметь какое-то отношение к Awesome Window Manager или, возможно, к чему-то еще. Я говорю это, потому что инструктор сказал, что когда вы изменяете размер окна, размер холста также должен автоматически изменяться.

Вот часть кода, чтобы вы могли видеть, что я делаю:

import objectdraw.*;
import java.awt.*;

public class ResizableBallController extends WindowController
{
  // Canvas separators
  private Line xAxis,
               yAxis;

 boolean xAxisGrabbed,
          yAxisGrabbed;

  public void begin()
  {
    int canvasWidth              = canvas.getWidth(),
        canvasHeight             = canvas.getHeight(),
        canvasHorizontalMidPoint = canvasWidth / 2,
        canvasVerticalMidpoint   = canvasHeight / 2;

    xAxis = new Line(0, canvasVerticalMidpoint,
                     canvasWidth, canvasVerticalMidpoint,
                     canvas);

    yAxis = new Line(canvasHorizontalMidPoint, 0,
                     canvasHorizontalMidPoint, canvasHeight,
                     canvas);
  }

  public void onMousePress(Location p)
  {
    xAxisGrabbed = xAxis.contains(p);
    yAxisGrabbed = yAxis.contains(p);
  }

  public void onMouseDrag(Location p)
  {
    if (xAxisGrabbed)
    {
      xAxis.moveTo(0, p.getY());
    }

    if (yAxisGrabbed)
    {
      yAxis.moveTo(p.getX(), 0);
    }
  }

  public void paint(java.awt.Graphics g)
  {
    super.paint(g);
    System.out.println("paint called");
  }
} // End of public class ResizableBallController extends WindowController

person Community    schedule 20.10.2012    source источник
comment
Что это за замечательная библиотека wm, которую вы используете?   -  person Hovercraft Full Of Eels    schedule 20.10.2012
comment
@HovercraftFullOfEels AwesomeWM — это оконный менеджер, который я использую в Linux. Ничего общего с Java или какими-либо библиотеками Java. Я упоминаю об этом на тот случай, если проблема заключается в оконном менеджере.   -  person    schedule 20.10.2012
comment
Для моего класса CS11 мне нужно написать небольшой апплет. Если не было явно указано, что нужно сделать апплет, сделайте фрейм. Апплеты сложнее разрабатывать и развертывать. Если апплет является частью спецификации, скажите тому, кто его указал, чтобы ему было очень стыдно. Они не должны учить, давать еду или кров. Вторая часть связана с изменением размера окна Что?!? Размер апплета, встроенного в веб-страницу, обычно нельзя изменить, что означает, что «первый совет имеет двойное значение».   -  person Andrew Thompson    schedule 20.10.2012
comment
Что такое WindowController? Чтобы быстрее получить помощь, опубликуйте SSCCE.   -  person Andrew Thompson    schedule 20.10.2012
comment
@AndrewThompson WindowController является частью библиотеки objectdraw.jar, которую мы используем. Он предоставляет некоторые функции, которые мы используем. cseweb.ucsd.edu/users/ricko/CSE11/objectdrawJavadocV1.1.2   -  person    schedule 20.10.2012


Ответы (1)


Очень странно, но у Java JDK, кажется, есть проблемы с некоторыми оконными менеджерами. Решение было найдено случайно. Позиция JFrame и функция pack() в Awesome WM

person Community    schedule 20.10.2012