edit 2: Я решил, что было бы легче понять, если бы я просто поместил весь код, чтобы вы могли его протестировать.Страница графика Java Array Loop не работает
Редактировать: Я понимаю, что то, что я сказал, было неясным, поэтому я объясню это как можно лучше. В принципе, я рисую прямоугольники на графической странице, используя метод fillRect. Проблема в том, что когда я изменяю размер одного, все они меняются, так как все они перерисовываются каждый раз, когда нарисован новый. Чтобы исправить это, я добавил массив, который хранит все размеры, которые вводятся через колесо прокрутки в другой части проблемы. В любом случае, я знаю, что проблема изолирована от цикла, который якобы рисует их все определенного размера, поэтому я добавил цикл, который теоретически должен давать мне временную переменную каждый раз, чтобы использовать это, перерисовывая все размеры прямоугольника, начиная с 0 каждый время выполнения основного цикла. Проблема состоит в том, что на самом деле это не перерисовывает прямоугольники до их индивидуальных размеров и вместо этого рисует их до текущего размера. Я также обновил часть кода.
У меня возникли проблемы с проектом на Java. То, что он должен делать, это изменить размер каждого отдельного объекта прямоугольника, сохранив его в массиве, а затем воссоздать прямоугольники, основанные на длине массива. Я, по крайней мере, думаю, сделаю это, создав переменную, которая должна быть равна SIZE, которая будет изменена в другой части программы, а затем установите ее равной определенному элементу в массиве в i. Во всяком случае, когда я это делаю, я меняю все длины на любую текущую длину, когда рисую прямоугольник. Я знаю, что проблема заключается в том, что я использую i в части размера, но что бы я использовал? Заранее благодарю за любую помощь!
Вот код:
public class Dots
{
public static void main(String[] args)
{
JFrame frame = new JFrame("Array Rectangles");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
DotsPanel dotsPanel = new DotsPanel();
frame.getContentPane().add(dotsPanel);
//buttons
JButton btnNewButton = new JButton("RED");
btnNewButton.setHorizontalAlignment(SwingConstants.LEFT);
btnNewButton.setVerticalAlignment(SwingConstants.BOTTOM);
btnNewButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
}
});
btnNewButton.setForeground(Color.RED);
dotsPanel.add(btnNewButton);
JButton btnNewButton_1 = new JButton("GREEN");
btnNewButton_1.setForeground(Color.GREEN);
btnNewButton_1.setVerticalAlignment(SwingConstants.BOTTOM);
dotsPanel.add(btnNewButton_1);
JButton btnNewButton_2 = new JButton("BLUE");
btnNewButton_2.setForeground(Color.BLUE);
dotsPanel.add(btnNewButton_2);
JButton btnNewButton_3 = new JButton("BLACK");
btnNewButton_3.setForeground(new Color(0, 0, 0));
dotsPanel.add(btnNewButton_3);
frame.pack();
frame.setVisible(true);
}
}
import java.util.ArrayList;
import java.util.Random;
import javax.swing.JPanel;
import java.awt.*;
import java.awt.event.*;
public class DotsPanel extends JPanel
{
// radius of each dot
private int SIZE = 25;
private int SIZEAccess;
private static final Random generator = new Random();
//used to count amount of dots
private ArrayList<Point> pointList;
int[] sizes = new int [10000];
//Sets up this std. sized panel to listen for mouse events.
public DotsPanel()
{
pointList = new ArrayList<Point>();
addMouseListener (new DotsListener());
addMouseMotionListener(new DotsListener());
addMouseWheelListener(new DotsListener());
setBackground(Color.white);
setPreferredSize(new Dimension(1024, 768));
}
//used to generate a random color
public static Color randomColor() {
return new Color(generator.nextInt(256), generator.nextInt(256), generator.nextInt(256));
}
// Draws all of the dots stored in the list.
public void paintComponent(Graphics page)
{
super.paintComponent(page);
//draws a centered dot of random color
int i = 0;
for (Point spot : pointList)
{
sizes[i] = SIZE;
//SIZEAccess = SIZE;
//sizes[i] = SIZEAccess;
//page.fillRect(spot.x-SIZE, spot.y-SIZE, SIZE*2, SIZE*2);
for (int temp = 0; temp <= i; temp++)
page.fillRect(spot.x-sizes[temp], spot.y-sizes[temp], sizes[temp]*2, sizes[temp]*2);
//page.fillRect(spot.x-SIZE, spot.y-SIZE, SIZE*2, SIZE*2);
//page.setColor(randomColor());
//page.setColor(c)
i++;
}
//displays the amount of rectangles drawn at the top left of screen
page.drawString("Count: " + pointList.size(), 5, 15);
page.drawString("To change the size of the squares, use mouse scroll wheel.", 350, 15);
page.drawString("Size: " + SIZE, 950, 15);
}
// Represents the listener for mouse events.
private class DotsListener implements MouseListener, MouseMotionListener, MouseWheelListener
{
// Adds the current point to the list of points and redraws
// the panel whenever the mouse button is pressed.
public void mousePressed(MouseEvent event)
{
pointList.add(event.getPoint());
repaint();
}
// Provide empty definitions for unused event methods.
public void mouseClicked(MouseEvent event) {
}
public void mouseReleased(MouseEvent event) {
}
public void mouseEntered(MouseEvent event) {
}
public void mouseExited(MouseEvent event) {}
// Adds the current point to the list of points and redraws
// the panel whenever the mouse button is dragged.
public void mouseDragged(MouseEvent event) {
pointList.add(event.getPoint());
repaint();
}
public void mouseMoved(MouseEvent event) {
}
public void mouseWheelMoved(MouseWheelEvent event)
{
int notches = 0;
notches = event.getWheelRotation();
//int
if (notches > 0)
{
SIZE = SIZE + notches;
notches = 0;
}
else if (notches < 0)
{
int tempSIZE = SIZE;
tempSIZE = tempSIZE + notches;
//prevents the program from having dots that increase due to multiplying negatives by negatives
//by making anything less than 1 equal 1
if(tempSIZE < 1)
tempSIZE = 1;
SIZE = tempSIZE;
notches = 0;
}
}
}
//SIZE = SIZE + notches;
}
Предполагается, что это анимация? Я не понимаю, что вы пытаетесь сделать. Если анимация, используйте таймер Swing, а не цикл for. –
Извините, мое объяснение не было большим; это не анимация. Это программа, которая рисует прямоугольники при срабатывании MouseEvent. – itdev9345
Пожалуйста, подумайте над редактированием своего вопроса с целью постараться сделать ваш вопрос максимально ясным. Попытайтесь объяснить свою проблему, как если бы вы объясняли это 6-летнему. Предположим, что мы ничего не знаем о вашем текущем проекте, желаниях или проблемах. –