EDIT: для уточнения, одним из моих требований является использование одного массива.Единый массив для хранения нескольких переменных в каждом элементе
У меня возникли проблемы с хранением нескольких переменных в одном элементе массива. Мы создаем действительно простую программу для имитации Microsoft Paint. Одним из требований является сохранение каждого элемента, который я втягиваю в массив, так что метод «paint» реплицирует чертежи каждый раз, когда окна сводятся к минимуму, а затем повторно отображаются. Ниже приведены требования
Мы предполагаем, чтобы максимальный размер для массива 20. Каждый элемент должен включать в себя переменные: 5
- обугленного форму (L для линии, R для прямоугольника, с для окружности)
- Старта х значения
- Старт у значения
- ширина (прямоугольник), или окончание х (строка), или радиус (круг)
- высоты (прямоугольник), или окончание у (линии), или радиус (круг)
Вот мой код для класса массива:
class storeDraws {
final int MAXSIZE = 20;
static int S[];
static int n; //number of draws user makes
static char shape;
static double px, py, w, h;
storeDraws() {
S = new int [MAXSIZE];
n = 0;
shape = 'l';
px = 0;
py = 0;
w = 0;
h = 0;
}
}
Я прочитал несколько мест, которые я могу ввести массив как (с помощью mouseReleased (MouseEvent е) метод:
storeDraws[] input = new storeDraws{value, value, value, value, value};
Но я не думаю, что это сработало бы для того, что я пытаюсь сделать с помощью метода «paint», чтобы перерисовывать фигуры. Я думал, что могу как-то передать его, используя стандартный формат S [n] = (char, double, double, double, double), но я предупреждаю, что это незаконно.
Редактировать 8:30 am Я получил эту часть работы. В моем классе вот мой код сейчас.
class storeDraws {
static char shape;
static int px, py, w, h;
storeDraws() {
shape = 'l';
px = 0;
py = 0;
w = 0;
h = 0;
}
}
Затем я заявил об этом в классе DrawPanel:
private storeDraws[] store = new storeDraws[20];
private int n = 0;
И mouseReleased метод DrawPanel:
public void mouseReleased(MouseEvent e) {
if (drawShape == "line") {
store[n].shape = 'l';
store[n].px = p1.x;
store[n].py = p1.y;
store[n].w = p3.x;
store[n].h = p3.y;
n++;
}
И краски:
public void paint(Graphics g) {
for (int i = 0; i < n; i++) {
if (store[i].shape == 'l')
g.drawLine(store[n].px, store[n].py, store[n].w, store[n].h);
Но если я рисую 6 строк он только перерисовывает las t линии.
В массиве хранятся только аналогичные элементы, поэтому с '(char, double, double, ...)' вы получаете ошибку. Вы уверены, что вам нужен массив? Вы можете использовать список или карту. – hamena314
Вам нужно переосмыслить, как вы представляете фигуры. Создайте класс 'Shape', затем создайте массив этого класса' Shape [] '. Как и сейчас, ваш класс 'storeDraws' пытается сделать то и другое. – kuporific
@ hamena314 Требование моего назначения - использовать массив ... –