Среда программирования:
Eclipce
import java.awt.*; import javax.swing.*; import java.awt.event.*; import java.io.ObjectInputStream.GetField; public class Window_ { public static void main(String[] args) { /* Создание окна */ JFrame w=new JFrame("Окно с изображением"); w.setSize(600, 600); w.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); w.setLayout(new BorderLayout(5,5)); final Canvas canv=new Canvas(); w.add(canv); w.setVisible(true); } } @SuppressWarnings("serial") /* Класс, который будет рисовать элементы*/ class Canvas extends JComponent{ int arr[][]; /* Яркость кружочков */ int sx=2; /* Ширина холста */ int sy=2; /* Высота холста */ int x=3; /* Позиция мыши */ int y=3; /* Позиция мыши */ int col[]={255,0,0}; /* Цвет кружочков */ public Canvas() { /* Объявление массива */ arr=new int[35][]; for(int i=0;i<35;i++) arr[i]=new int[35]; /* Событие при изменении позиции мыши * обновление её кооридинат в программе */ addMouseMotionListener(new MouseMotionListener() { @Override public void mouseMoved(MouseEvent e) { x=e.getX(); y=e.getY(); } @Override public void mouseDragged(MouseEvent e) {} }); addMouseListener(new MouseListener() { @Override public void mouseReleased(MouseEvent e) { } @Override /* Смена цветов при нажатии мыши */ public void mousePressed(MouseEvent e) { if(col[0] ==255 && col[1]==0 &&col[2]==0){col[0]=255;col[1]=128;col[2]=0;} else if(col[0] ==255 && col[1]==128 &&col[2]==0){col[0]=255;col[1]=255;col[2]=0;} else if(col[0] ==255 && col[1]==255 &&col[2]==0){col[0]=128;col[1]=255;col[2]=0;} else if(col[0] ==128 && col[1]==255 &&col[2]==0){col[0]=0;col[1]=255;col[2]=0;} else if(col[0] ==0 && col[1]==255 &&col[2]==0){col[0]=0;col[1]=255;col[2]=128;} else if(col[0] ==0 && col[1]==255 &&col[2]==128){col[0]=0;col[1]=255;col[2]=255;} else if(col[0] ==0 && col[1]==255 &&col[2]==255){col[0]=0;col[1]=128;col[2]=255;} else if(col[0] ==0 && col[1]==128 &&col[2]==255){col[0]=0;col[1]=0;col[2]=255;} else if(col[0] ==0 && col[1]==0 &&col[2]==255){col[0]=128;col[1]=0;col[2]=255;} else if(col[0] ==128 && col[1]==0 &&col[2]==255){col[0]=255;col[1]=0;col[2]=255;} else if(col[0] ==255 && col[1]==0 &&col[2]==255){col[0]=255;col[1]=0;col[2]=128;} else if(col[0] ==255 && col[1]==0 &&col[2]==128){col[0]=255;col[1]=0;col[2]=0;} } @Override public void mouseExited(MouseEvent e) {} @Override public void mouseEntered(MouseEvent e) {} @Override public void mouseClicked(MouseEvent e) {} }); } /* Пересчитывание яркости кружочков */ void mapUpdate(){ if(x<0 || y<0)return; /* Временный массив для записи изменений на экране*/ int buf[][]=new int[arr.length][arr.length]; int xp=(x*arr.length/sx)%arr.length,yp=(y*arr.length/sy)%arr.length; arr[xp][yp]=256; for(int i=0;i<arr.length;i++) for(int j=0;j<arr.length;j++) for(int k=-1;k<=1;k++) for(int l=1;l>=-1;l--) if (arr[i][j]!=0 && !(k==l && k==0 ) && i+k>=0 && j+l >=0 && i+k < arr.length && j+l < arr.length ) if(buf[i+k][j+l]<arr[i][j]/1.2) /* Изменения записываются во временный массив */ if(Math.abs(j+k)!=1)buf[i+k][j+l]= (int) ((arr[i][j]/1.2 )%256); else buf[i+k][j+l]= (int) Math.abs((arr[i][j]/1.23)); /* Временный массив выгружается в основной */ for(int i=0;i<arr.length;i++) for(int j=0;j<arr.length;j++) if(buf[i][j]>10)buf[i][j]/=1.3; else buf[i][j]=0; arr=buf; } // Метод, перерисовывающий элемент внутри окна, при обновлении public void paintComponent(Graphics g){ super.paintComponents(g); Graphics2D g2d=(Graphics2D)g; g2d.setColor(Color.BLACK); sy=getHeight(); sx=getWidth(); /* Холст закрашивается чёрным цветом*/ g2d.fillRect(0, 0, sx, sy); /* Обновляются координаты кружочков*/ mapUpdate(); /* Выбранным цветом рисуются кружочки на экране*/ for(int i=0;i<arr.length;i++) for(int j=0;j<arr[i].length;j++){ g2d.setColor(new Color( col[0],col[1],col[2],arr[i][j]%256 )); g2d.fillOval(i*sx/arr.length, j*sy/arr.length, sx/arr.length, sy/arr.length); } /* Вызывает обновление рисунка после завершения рисования*/ super.repaint(); } }
Прикрепленный файл | Размер |
---|---|
moving_For_Mouse.zip | 5.24 кб |