У меня очень простая проблема. Я изучаю Java и получил задание нарисовать машину. Я сделал это все в одном классе, который расширяет JPanel
, и сделал рисунок в пределах paintComponent()
.Нарисуйте колесо автомобиля
Я понимаю, что это плохое объектно-ориентированное программирование, и решил попытаться подклассифицировать некоторые части, чтобы исправить эту ситуацию.
Я попытался создать класс, который рисует колеса, но не увенчался успехом.
По сути, я хотел бы быть в состоянии сделать это:
Main Class extends JPanel
paintComponent{
Wheel leftWheel = new Wheel(0, 50, 100);
this.add(leftWheel);
}
Это должно сделать колесо в точке (0, 50) в рамках JPanel
, и имеют диаметр 100.
Тем не менее, я не уверен, как я должен контролировать позиционирование в JPanel
. Когда я это сделаю, колесо нарисовано в верхней части моего окна. Это то, что выглядит мой класс колеса, как:
public class Wheel extends JComponent {
private int x, y, diameter;
private boolean clockwise;
Wheel(int x, int y, int size, boolean cw)
{
this.setPreferredSize(new Dimension(size, size));
this.x = x;
this.y = y;
diameter = size;
clockwise = cw;
repaint();
}
public void paintComponent(Graphics canvas)
{
super.paintComponent(canvas);
canvas.setColor(Color.gray);
canvas.fillOval(x,y,diameter,diameter);
}
}
х и у должны быть там, где он появляется на родительское окно, однако, это не так, в следующем коде (находится в родительском классе, который расширяет JFrame):
Wheel leftWheel = new Wheel(0,0,WHEEL_DIAMETER,true);
this.add(leftWheel);
колесо не тянет в левом верхнем углу моего окна, он рисует в центре моего окна в верхней части. Я что-то делаю неправильно? Извините, если я не следую некоторым соглашениям Java, у меня пока нет опыта. Является ли это тем, как я должен обращаться с рисунком колеса, или существует ли более приемлемая практика для этого типа рисунка?
К примеру, в моем JPanel
классе, если добавить следующий код:
Wheel x = new Wheel(50,60,75,true);
this.add(x);
я кадр размером 75x75, в которой колесо (размер 75x75) рисуется в точке (50,60) в пределах , что кадр, а не внутри родительской системы координат JPanel
. В результате получается круг, который обрезается, и я вижу только верхний левый угол круга. Это изображение отображается в верхней части моего JPanel
Я понимаю, как нарисовать колесо и переместить его внутри себя, но как поместить колесо на JPanel
?
С точки зрения инкапсуляции я переместил логику позиционирования полностью за пределы класса «Колесо». Это бизнес класса, который собирает автомобиль, чтобы «установить» колесо в правильном положении. – 5gon12eder
Согласен. Как я могу управлять позиционированием в родительском классе? Вот чего я не понимаю. Я не знаком с Java и синтаксисом. –
Вы можете использовать перегруженный метод 'add', который принимает объект ограничений для управления позиционированием. Как вы это сделаете, это точно зависит от ['LayoutManager'] (https://docs.oracle.com/javase/7/docs/api/java/awt/LayoutManager.html), который вы используете. – 5gon12eder