Для моего класса 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
WindowController
? Чтобы быстрее получить помощь, опубликуйте SSCCE. - person Andrew Thompson   schedule 20.10.2012