2011-12-23 8 views
14

Sembra come non possibile fissare Graphics2D mancanza nel codice, non devo per impostare le dimensioni correzione per le animazioni, altrimenti qualche iniziare al di fuori rettangolo 490 x 490 congelamento o agitazione sullo schermopassare corrente Data

mia SSCCE

import java.awt.*; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.awt.image.BufferedImage; 
import java.util.ArrayList; 
import java.util.Random; 
import java.util.Vector; 
import java.util.regex.Pattern; 
import javax.swing.*; 
import javax.swing.table.*; 

public class OneTwoThree implements Runnable { 

    private String testS; 
    private JFrame frame = new JFrame("frameTitle"); 
    private JScrollPane tblS = new JScrollPane(); 
    private JTable tbl; 
    private Vector<String> rOrH; 
    private long t1 = 0L; 
    private long t2 = 0L; 
    private AlphaChars aChars = new AlphaChars(); 
    private GradientViewPortOriginal tableViewPort; 
    private JViewport viewport = new JViewport(); 
    private Random random = new Random(); 
    private Vector<Vector<Integer>> vec = new Vector<Vector<Integer>>(); 
    private boolean bolo = false; 

    public OneTwoThree() { 
     t1 = System.currentTimeMillis(); 
     int regLenght = 3500; 
     int chars = 0; 
     testS = aChars.getNext(regLenght); 
     rOrH = new Vector<String>(); 
     Vector<Vector<String>> rowD = new Vector<Vector<String>>(); 
     for (int e = 0; e < regLenght;) { 
      chars++; 
      if (chars > 50) { 
       chars = 1; 
       rowD.add(rOrH); 
       rOrH = new Vector<String>(); 
      } 
      String str = (testS.substring(e, (e + 1))).toString(); 
      if (str != null) { 
       rOrH.add(str); 
      } else { 
       rOrH.add(""); 
      } 
      e++; 
     } 
     rOrH = new Vector<String>(); 
     for (int i = 0; i < 50; i++) { 
      rOrH.add(String.valueOf(i + 1)); 
     } 
     tbl = new JTable(rowD, rOrH); 
     TableColumnModel tcm = tbl.getColumnModel(); 
     for (int i = 0; i < (tcm.getColumnCount()); i++) { 
      tcm.getColumn(i).setPreferredWidth(4); 
     } 
     tbl.setGridColor(tbl.getBackground()); 
     tbl.setRowHeight(10); 
     tbl.setTableHeader(null); 
     tbl.setPreferredScrollableViewportSize(tbl.getPreferredSize()); 
     tbl.setRowSelectionAllowed(false); 
     tbl.setColumnSelectionAllowed(false); 
     tableViewPort = new GradientViewPortOriginal(tbl); 
     viewport = tableViewPort.getViewport(); 
     RepaintManager.setCurrentManager(new RepaintManager() { 

      @Override 
      public void addDirtyRegion(JComponent c, int x, int y, int w, int h) { 
       Container con = c.getParent(); 
       while (con instanceof JComponent) { 
        if (!con.isVisible()) { 
         return; 
        } 
        if (con instanceof GradientViewPortOriginal) { 
         c = (JComponent) con; 
         x = 0; 
         y = 0; 
         w = con.getWidth(); 
         h = con.getHeight(); 
        } 
        con = con.getParent(); 
       } 
       super.addDirtyRegion(c, x, y, w, h); 
      } 
     }); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.add(tableViewPort, BorderLayout.CENTER); 
     frame.setLocation(20, 20); 
     frame.pack(); 
     frame.setVisible(true); 
     addColumnRenderes(); 
     for (int i = 0; i < 35; i++) { 
      Star star = new Star(new Point(random.nextInt(490), random.nextInt(490))); 
      star.setColor(new Color(100 + random.nextInt(155), 100 + random.nextInt(155), 100 + random.nextInt(155))); 
      star.setxIncr(-3 + random.nextInt(7)); 
      star.setyIncr(-3 + random.nextInt(7)); 
      tableViewPort.add(star); 
     } 
    } 

    private void addColumnRenderes() { 
     for (int i = 0; i < tbl.getColumnCount(); i++) { 
      RowColorRenderer rowRenderer = new RowColorRenderer(i); 
      TableColumn column = tbl.getColumnModel().getColumn(i); 
      column.setCellRenderer(rowRenderer); 
     } 
     addTableData(); 
    } 

    private void addTableData() { 
     tbl.setValueAt("8", 4, 25);tbl.setValueAt("4", 5, 24);tbl.setValueAt("1", 5, 25);tbl.setValueAt("4", 5, 26); 
     tbl.setValueAt("4", 6, 23);tbl.setValueAt("4", 6, 25);tbl.setValueAt("1", 6, 26);tbl.setValueAt("4", 6, 27); 
     tbl.setValueAt("1", 6, 28);tbl.setValueAt("1", 7, 21);tbl.setValueAt("4", 7, 22);tbl.setValueAt("1", 7, 23); 
     tbl.setValueAt("4", 7, 24);tbl.setValueAt("1", 7, 27);tbl.setValueAt("8", 7, 28);tbl.setValueAt("4", 8, 23); 
     tbl.setValueAt("1", 8, 24);tbl.setValueAt("1", 8, 25);tbl.setValueAt("8", 8, 26);tbl.setValueAt("8", 8, 27); 
     tbl.setValueAt("7", 9, 24);tbl.setValueAt("1", 9, 26);tbl.setValueAt("4", 9, 25);tbl.setValueAt("4", 10, 24); 
     tbl.setValueAt("1", 10, 25);tbl.setValueAt("8", 10, 26);tbl.setValueAt("4", 11, 23);tbl.setValueAt("4", 11, 27); 
     tbl.setValueAt("1", 12, 21);tbl.setValueAt("4", 12, 22);tbl.setValueAt("8", 12, 28);tbl.setValueAt("4", 13, 21); 
     tbl.setValueAt("8", 13, 29);tbl.setValueAt("1", 14, 19);tbl.setValueAt("4", 14, 20);tbl.setValueAt("8", 14, 30); 
     tbl.setValueAt("4", 15, 19);tbl.setValueAt("4", 15, 20);tbl.setValueAt("4", 15, 21);tbl.setValueAt("1", 15, 22); 
     tbl.setValueAt("4", 15, 23);tbl.setValueAt("1", 15, 31);tbl.setValueAt("1", 15, 32);tbl.setValueAt("4", 16, 22); 
     tbl.setValueAt("4", 17, 21);tbl.setValueAt("4", 18, 20);tbl.setValueAt("4", 19, 20);tbl.setValueAt("4", 20, 19); 
     tbl.setValueAt("4", 21, 17);tbl.setValueAt("4", 21, 18);tbl.setValueAt("4", 22, 16);tbl.setValueAt("4", 22, 17); 
     tbl.setValueAt("4", 22, 18);tbl.setValueAt("4", 22, 19);tbl.setValueAt("4", 22, 20);tbl.setValueAt("4", 24, 18); 
     tbl.setValueAt("4", 25, 17);tbl.setValueAt("4", 25, 17);tbl.setValueAt("4", 26, 16);tbl.setValueAt("4", 27, 15); 
     tbl.setValueAt("4", 27, 16);tbl.setValueAt("4", 27, 18);tbl.setValueAt("4", 28, 17);tbl.setValueAt("4", 29, 16); 
     tbl.setValueAt("4", 30, 15);tbl.setValueAt("4", 31, 14);tbl.setValueAt("4", 32, 13);tbl.setValueAt("4", 33, 12); 
     tbl.setValueAt("4", 33, 13);tbl.setValueAt("4", 33, 14);tbl.setValueAt("4", 33, 18);tbl.setValueAt("4", 34, 17); 
     tbl.setValueAt("4", 35, 16);tbl.setValueAt("4", 36, 15);tbl.setValueAt("4", 37, 14);tbl.setValueAt("4", 38, 13); 
     tbl.setValueAt("4", 39, 12);tbl.setValueAt("4", 40, 11);tbl.setValueAt("4", 41, 10);tbl.setValueAt("4", 42, 9); 
     tbl.setValueAt("4", 42, 10);tbl.setValueAt("4", 42, 11);tbl.setValueAt("4", 38, 18);tbl.setValueAt("4", 39, 18); 
     tbl.setValueAt("4", 40, 18);tbl.setValueAt("4", 41, 17);tbl.setValueAt("4", 42, 16);tbl.setValueAt("4", 43, 15); 
     tbl.setValueAt("4", 44, 14);tbl.setValueAt("4", 46, 13);tbl.setValueAt("4", 47, 12);tbl.setValueAt("4", 48, 11); 
     tbl.setValueAt("4", 49, 10);tbl.setValueAt("4", 50, 9);tbl.setValueAt("4", 51, 8);tbl.setValueAt("4", 52, 7); 
     tbl.setValueAt("4", 53, 6);tbl.setValueAt("4", 54, 5);tbl.setValueAt("4", 55, 4);tbl.setValueAt("4", 56, 6); 
     tbl.setValueAt("4", 56, 8);tbl.setValueAt("4", 56, 9);tbl.setValueAt("4", 56, 10);tbl.setValueAt("4", 56, 12); 
     tbl.setValueAt("4", 56, 13);tbl.setValueAt("4", 58, 10);tbl.setValueAt("4", 59, 11);tbl.setValueAt("4", 59, 12); 
     tbl.setValueAt("4", 60, 13);tbl.setValueAt("4", 61, 15);tbl.setValueAt("4", 61, 16);tbl.setValueAt("4", 59, 17); 
     tbl.setValueAt("4", 58, 18);tbl.setValueAt("4", 57, 19);tbl.setValueAt("4", 62, 18);tbl.setValueAt("4", 63, 19); 
     tbl.setValueAt("4", 63, 20);tbl.setValueAt("3", 62, 23);tbl.setValueAt("3", 63, 23);tbl.setValueAt("3", 64, 23); 
     tbl.setValueAt("3", 65, 23);tbl.setValueAt("3", 66, 23);tbl.setValueAt("3", 67, 23);tbl.setValueAt("3", 62, 28); 
     tbl.setValueAt("3", 63, 28);tbl.setValueAt("3", 64, 28);tbl.setValueAt("3", 65, 28);tbl.setValueAt("3", 66, 28); 
     tbl.setValueAt("3", 67, 28);tbl.setValueAt("8", 14, 26);tbl.setValueAt("8", 14, 27);tbl.setValueAt("8", 16, 27); 
     tbl.setValueAt("8", 16, 28);tbl.setValueAt("8", 17, 29);tbl.setValueAt("8", 18, 30);tbl.setValueAt("8", 19, 31); 
     tbl.setValueAt("8", 20, 32);tbl.setValueAt("8", 21, 31);tbl.setValueAt("8", 22, 30);tbl.setValueAt("8", 22, 29); 
     tbl.setValueAt("3", 20, 27);tbl.setValueAt("3", 21, 26);tbl.setValueAt("3", 22, 25);tbl.setValueAt("3", 23, 24); 
     tbl.setValueAt("3", 24, 24);tbl.setValueAt("3", 24, 25);tbl.setValueAt("3", 24, 26);tbl.setValueAt("8", 22, 32); 
     tbl.setValueAt("8", 23, 33);tbl.setValueAt("8", 24, 34);tbl.setValueAt("8", 25, 35);tbl.setValueAt("8", 26, 36); 
     tbl.setValueAt("8", 27, 37);tbl.setValueAt("8", 29, 34);tbl.setValueAt("8", 29, 35);tbl.setValueAt("8", 28, 36); 
     tbl.setValueAt("8", 30, 32);tbl.setValueAt("8", 31, 33);tbl.setValueAt("8", 32, 34);tbl.setValueAt("8", 33, 35); 
     tbl.setValueAt("8", 34, 36);tbl.setValueAt("8", 34, 37);tbl.setValueAt("3", 27, 30);tbl.setValueAt("3", 28, 29); 
     tbl.setValueAt("3", 29, 28);tbl.setValueAt("3", 30, 28);tbl.setValueAt("3", 31, 29);tbl.setValueAt("3", 32, 30); 
     tbl.setValueAt("3", 31, 24);tbl.setValueAt("3", 32, 23);tbl.setValueAt("3", 33, 22);tbl.setValueAt("3", 34, 22); 
     tbl.setValueAt("3", 34, 23);tbl.setValueAt("3", 34, 24);tbl.setValueAt("3", 37, 20);tbl.setValueAt("3", 38, 19); 
     tbl.setValueAt("3", 39, 18);tbl.setValueAt("3", 40, 18);tbl.setValueAt("3", 41, 19);tbl.setValueAt("3", 42, 20); 
     tbl.setValueAt("3", 36, 34);tbl.setValueAt("3", 37, 33);tbl.setValueAt("3", 38, 32);tbl.setValueAt("3", 39, 32); 
     tbl.setValueAt("3", 39, 33);tbl.setValueAt("3", 39, 34);tbl.setValueAt("3", 40, 24);tbl.setValueAt("3", 41, 23); 
     tbl.setValueAt("3", 42, 22);tbl.setValueAt("3", 43, 22);tbl.setValueAt("3", 43, 23);tbl.setValueAt("3", 43, 24); 
     tbl.setValueAt("3", 42, 30);tbl.setValueAt("3", 43, 29);tbl.setValueAt("3", 44, 28);tbl.setValueAt("3", 45, 28); 
     tbl.setValueAt("3", 46, 29);tbl.setValueAt("3", 47, 30);tbl.setValueAt("3", 50, 21);tbl.setValueAt("3", 51, 20); 
     tbl.setValueAt("3", 52, 19);tbl.setValueAt("3", 53, 19);tbl.setValueAt("3", 53, 20);tbl.setValueAt("3", 53, 21); 
     tbl.setValueAt("3", 50, 31);tbl.setValueAt("3", 51, 30);tbl.setValueAt("3", 52, 29);tbl.setValueAt("3", 53, 29); 
     tbl.setValueAt("3", 53, 30);tbl.setValueAt("3", 53, 31);tbl.setValueAt("3", 47, 15);tbl.setValueAt("3", 48, 14); 
     tbl.setValueAt("3", 49, 13);tbl.setValueAt("3", 50, 13);tbl.setValueAt("3", 51, 14);tbl.setValueAt("3", 52, 15); 
     tbl.setValueAt("3", 51, 25);tbl.setValueAt("3", 52, 24);tbl.setValueAt("3", 53, 23);tbl.setValueAt("3", 54, 23); 
     tbl.setValueAt("3", 55, 24);tbl.setValueAt("3", 46, 25);tbl.setValueAt("3", 50, 38);tbl.setValueAt("3", 51, 37); 
     tbl.setValueAt("3", 52, 36);tbl.setValueAt("3", 53, 36);tbl.setValueAt("3", 54, 37);tbl.setValueAt("3", 55, 38); 
     tbl.setValueAt("3", 58, 28);tbl.setValueAt("3", 59, 27);tbl.setValueAt("3", 60, 26);tbl.setValueAt("3", 58, 26); 
     tbl.setValueAt("3", 59, 27);tbl.setValueAt("3", 60, 28);tbl.setValueAt("8", 37, 36);tbl.setValueAt("8", 38, 37); 
     tbl.setValueAt("8", 38, 38);tbl.setValueAt("8", 40, 39);tbl.setValueAt("8", 41, 40);tbl.setValueAt("8", 42, 41); 
     tbl.setValueAt("8", 43, 41);tbl.setValueAt("8", 44, 38);tbl.setValueAt("8", 44, 39);tbl.setValueAt("8", 44, 40); 
     tbl.setValueAt("8", 43, 35);tbl.setValueAt("8", 44, 36);tbl.setValueAt("8", 45, 37);tbl.setValueAt("8", 46, 38); 
     tbl.setValueAt("8", 47, 39);tbl.setValueAt("8", 48, 40);tbl.setValueAt("8", 49, 41);tbl.setValueAt("8", 50, 42); 
     tbl.setValueAt("8", 51, 43);tbl.setValueAt("8", 52, 44);tbl.setValueAt("8", 53, 45);tbl.setValueAt("8", 54, 43); 
     tbl.setValueAt("8", 55, 42);tbl.setValueAt("8", 56, 41);tbl.setValueAt("8", 59, 31);tbl.setValueAt("8", 60, 32); 
     tbl.setValueAt("8", 61, 33);tbl.setValueAt("8", 62, 34);tbl.setValueAt("8", 58, 36);tbl.setValueAt("8", 59, 37); 
     tbl.setValueAt("8", 60, 38);tbl.setValueAt("8", 61, 39);tbl.setValueAt("8", 62, 40);tbl.setValueAt("8", 62, 41); 
     tbl.setValueAt("8", 60, 35);tbl.setValueAt("8", 61, 36);tbl.setValueAt("8", 62, 37);tbl.setValueAt("8", 58, 45); 
     tbl.setValueAt("8", 59, 42);tbl.setValueAt("8", 59, 43);tbl.setValueAt("8", 59, 44);tbl.setValueAt("8", 62, 40); 
     frame.setTitle(" - - > Merry Christmast < - - "); 
     t2 = System.currentTimeMillis(); 
     System.out.println("miliSec:" + (t2 - t1)); //aver. 32 miliSec. 
     new Thread(this).start(); 
    } 

    @Override 
    public void run() { 
     while (true) { 
      try { 
       Thread.sleep(1000); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
      if (!bolo) { 
       for (int i = 0; i < 30; i++) { 
        Vector<Integer> vecLocal = new Vector<Integer>(); 
        final int r1 = random.nextInt(tbl.getRowCount() - 1); 
        final int c1 = random.nextInt(tbl.getColumnCount() - 1); 
        vecLocal.add(r1); 
        vecLocal.add(c1); 
        vec.add(vecLocal); 
        addSnowFlag(); 
        try { 
         Thread.sleep(250); 
        } catch (Exception e) { 
         e.printStackTrace(); 
        } 
       } 
       bolo = true; 
      } else { 
       Vector<Integer> vecLocal = new Vector<Integer>(); 
       final int r = random.nextInt(tbl.getRowCount() - 1); 
       final int c = random.nextInt(tbl.getColumnCount() - 1); 
       vecLocal.add(r); 
       vecLocal.add(c); 
       vec.add(vecLocal); 
       addSnowFlag(); 
       try { 
        Thread.sleep(500); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } 
     } 
    } 

    private void addSnowFlag() { 
     if (vec.size() > -1) { 
      Vector<Integer> vecLocal = vec.elementAt(vec.size() - 1); 
      final int r = vecLocal.elementAt(0); 
      final int c = vecLocal.elementAt(1); 
      String str = String.valueOf(tbl.getValueAt(r, c)); 
      if (!str.isEmpty()) { 
       if (!Pattern.compile("\\d").matcher(str).find()) { 
        if (!Pattern.compile("[123456789]").matcher(str).find()) { 
         Runnable doRun = new Runnable() { 

          @Override 
          public void run() { 
           tbl.setValueAt("9", r, c); 
          } 
         }; 
         SwingUtilities.invokeLater(doRun); 
         if (bolo) { 
          Vector<Integer> vecLocal1 = vec.elementAt(0); 
          final int r1 = vecLocal1.elementAt(0); 
          final int c1 = vecLocal1.elementAt(1); 
          Runnable doRun1 = new Runnable() { 

           @Override 
           public void run() { 
            tbl.setValueAt(aChars.getNext(1), r1, c1); 
            vec.removeElementAt(0); 
           } 
          }; 
          SwingUtilities.invokeLater(doRun1); 
         } 
        } 
       } 
      } 
     } 
    } 

    private class GradientViewPortOriginal extends JScrollPane { 

     private static final long serialVersionUID = 1L; 
     private final int h = 80; 
     private BufferedImage img = null; 
     private BufferedImage shadow = new BufferedImage(1, h, BufferedImage.TYPE_INT_ARGB); 
     private JViewport viewPort; 
     private ArrayList<Star> stars = new ArrayList<Star>(); 

     public GradientViewPortOriginal(JComponent com) { 
      super(com); 
      viewPort = this.getViewport(); 
      viewPort.setScrollMode(JViewport.BLIT_SCROLL_MODE); 
      viewPort.setScrollMode(JViewport.BACKINGSTORE_SCROLL_MODE); 
      viewPort.setScrollMode(JViewport.SIMPLE_SCROLL_MODE); 
      setPreferredSize(this.getPreferredSize()); 
      paintBackGround(new Color(250, 250, 150)); 
     } 

     public void add(Star star) { 
      stars.add(star); 
     } 
     // 
     private Timer timer = new Timer(33, new ActionListener() { 

      @Override 
      public void actionPerformed(ActionEvent e) { 
       for (Star star : stars) { 
        star.move(); 
       } 
       repaint(); 
      } 
     }); 

     public void startAnimation() { 
      if (!timer.isRunning()) { 
       timer.start(); 
      } 
     } 

     @Override 
     public void addNotify() { 
      super.addNotify(); 
      timer.start(); 
     } 

     private void paintBackGround(Color g) { 
      Graphics2D g2 = shadow.createGraphics(); 
      g2.setPaint(g); 
      g2.fillRect(0, 0, 1, h); 
      g2.setComposite(AlphaComposite.DstIn); 
      g2.setPaint(new GradientPaint(0, 0, new Color(0, 0, 0, 0f), 0, h, 
        new Color(0.8f, 0.8f, 0.8f, 0.5f))); 
      g2.fillRect(0, 0, 1, h); 
      g2.dispose(); 
     } 

     @Override 
     public void paint(Graphics g) { 
      if (img == null || img.getWidth() != getWidth() || img.getHeight() != getHeight()) { 
       img = new BufferedImage(getWidth(), getHeight(), BufferedImage.TYPE_INT_ARGB); 
      } 
      Graphics2D g2 = img.createGraphics(); 
      super.paint(g2); 
      ((Graphics2D) g).setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); 
      Rectangle bounds = getViewport().getVisibleRect(); 
      g2.scale(bounds.getWidth(), -1); 
      int y = (getColumnHeader() == null) ? 0 : getColumnHeader().getHeight(); 
      g2.drawImage(shadow, bounds.x, -bounds.y - y - h, null); 
      g2.scale(1, -1); 
      g2.drawImage(shadow, bounds.x, bounds.y + bounds.height - h + y, null); 
      g2.dispose(); 
      g.drawImage(img, 0, 0, null); 
      for (Star star : stars) { 
       g.setColor(star.getColor()); 
       g.fillPolygon(star); 
      } 
     } 
    } 

    private class RowColorRenderer extends DefaultTableCellRenderer { 

     private static final long serialVersionUID = 1L; 
     private int colNo = 0; 

     RowColorRenderer(int col) { 
      colNo = col; 
     } 

     @Override 
     public Component getTableCellRendererComponent(JTable table, Object value, 
       boolean isSelected, boolean hasFocus, int row, int column) { 
      Component comp = super.getTableCellRendererComponent(table, value, 
        isSelected, hasFocus, row, column); 
      if (!isSelected) { 
       if (table.getValueAt(row, colNo) != null) { 
        String str = table.getValueAt(row, colNo).toString(); 
        if (!str.isEmpty()) { 
         if (Pattern.compile("\\d").matcher(str).find()) { 
          if (((Pattern.compile("[9]").matcher(str).find()))) { 
           setBackground(new Color(250, 250, 150)); 
           setForeground(new Color(250, 250, 150)); 
           setFont(new Font("Serif", Font.BOLD, 9)); 
          } else if (((Pattern.compile("[1]").matcher(str).find()))) { 
           setBackground(tbl.getBackground()); 
           setForeground(Color.orange); 
           setFont(new Font("Serif", Font.BOLD, 8)); 
          } else { 
           setBackground(tbl.getBackground()); 
           setForeground(Color.gray); 
           setFont(new Font("Serif", Font.BOLD, 9)); 
          } 
         } else { 
          setBackground(tbl.getBackground()); 
          setForeground(Color.lightGray); 
          setFont(new Font("Serif", Font.PLAIN, 6)); 
         } 
        } 
       } 
      } 
      setHorizontalAlignment(CENTER); 
      return this; 
     } 
    } 

    private class AlphaChars { 

     public static final int MIN_LENGTH = 2000; 
     private java.util.Random rand = new java.util.Random(); 
     private char[] AlphaChars = { 
      'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 
      'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',}; 
     /*'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 
     'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 
     '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '+', '-', '*', '/', '<', '>', '&', 
     '#', '@', '{', '}', '?', ':', '_', '"', '!', ')', '('};*/ 

     public String getNext() { 
      StringBuilder strbuf = new StringBuilder(); 
      for (int i = 0; i < MIN_LENGTH; i++) { 
       strbuf.append(getAlphaChars()[getRand().nextInt(getAlphaChars().length)]); 
      } 
      return strbuf.toString(); 
     } 

     public String getNext(int reqLenght) { 
      StringBuilder strbuf = new StringBuilder(); 
      for (int i = 0; i < reqLenght; i++) { 
       strbuf.append(getAlphaChars()[getRand().nextInt(getAlphaChars().length)]); 
      } 
      return strbuf.toString(); 
     } 

     public java.util.Random getRand() { 
      return rand; 
     } 

     public void setRand(java.util.Random aRand) { 
      rand = aRand; 
     } 

     public char[] getAlphaChars() { 
      return AlphaChars; 
     } 

     public void setAlphaChars(char[] aAlphaChars) { 
      AlphaChars = aAlphaChars; 
     } 
    } 

    private class Star extends Polygon { 

     private static final long serialVersionUID = 1L; 
     private Point location = null; 
     private Color color = Color.YELLOW; 
     private int xIncr, yIncr; 
     static final int WIDTH = 500, HEIGHT = 500; 

     Star(Point location) { 
      int x = location.x; 
      int y = location.y; 
      this.location = location; 
      this.addPoint(x, y + 8); 
      this.addPoint(x + 8, y + 8); 
      this.addPoint(x + 11, y); 
      this.addPoint(x + 14, y + 8); 
      this.addPoint(x + 22, y + 8); 
      this.addPoint(x + 17, y + 12); 
      this.addPoint(x + 21, y + 20); 
      this.addPoint(x + 11, y + 14); 
      this.addPoint(x + 3, y + 20); 
      this.addPoint(x + 6, y + 12); 
     } 

     public void setColor(Color color) { 
      this.color = color; 
     } 

     public void move() { 
      if (location.x < 0 || location.x > WIDTH) { 
       xIncr = -xIncr; 
      } 
      if (location.y < 0 || location.y > WIDTH) { 
       yIncr = -yIncr; 
      } 
      translate(xIncr, yIncr); 
      location.setLocation(location.x + xIncr, location.y + yIncr); 
     } 

     public void setxIncr(int xIncr) { 
      this.xIncr = xIncr; 
     } 

     public void setyIncr(int yIncr) { 
      this.yIncr = yIncr; 
     } 

     public Color getColor() { 
      return color; 
     } 
    } 

    public static void main(String args[]) { 
     Runnable doRun = new Runnable() { 

      @Override 
      public void run() { 
       OneTwoThree hnvit = new OneTwoThree(); 
      } 
     }; 
     SwingUtilities.invokeLater(doRun); 
    } 
} 

sono augurare Buon Christmast per tutti i contribuenti Java qui

EDIT:

prega change private class Star extends Polygon { metodo move() a --->

public void move() { 
    if (location.x < 0 || location.x > frame.getContentPane().getWidth() - 20) { 
     xIncr = -xIncr; 
    } 
    if (location.y < 0 || location.y > frame.getContentPane().getHeight() - 20) { 
     yIncr = -yIncr; 
    } 
    translate(xIncr, yIncr); 
    location.setLocation(location.x + xIncr, location.y + yIncr); 
} 
+8

"SSCCE" contiene la parola "corto";) – Bozho

+1

+1 Buon Christmast a voi e tutti i collaboratori. Potresti scrivere java. *; :) – adatapost

+0

e la tua domanda è ... :-) Vacanze tranquille – kleopatra

risposta

11

L'esempio seguente crea MAX ornamenti per il vostro albero. Esso utilizza una ComponentListener trasferirmi Qualsiasi ornamenti periferici.

enter image description here

package merrychristmas; 

import java.awt.AlphaComposite; 
import java.awt.Color; 
import java.awt.Dimension; 
import java.awt.EventQueue; 
import java.awt.Graphics; 
import java.awt.Graphics2D; 
import java.awt.RenderingHints; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.awt.event.ComponentAdapter; 
import java.awt.event.ComponentEvent; 
import java.util.LinkedList; 
import java.util.Queue; 
import java.util.Random; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.Timer; 

public class Baubles extends JPanel implements ActionListener { 

    private static final int MAX = 64; 
    private static final String TITLE = "Baubles"; 
    private static final Random rnd = new Random(); 
    private static final AlphaComposite ac = 
     AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.75f); 
    private final Timer timer = new Timer(100, this); 
    private final Queue<Bauble> queue = new LinkedList<Bauble>(); 

    public static void main(String[] args) { 
     EventQueue.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       JFrame f = new JFrame(TITLE); 
       f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       Baubles dt = new Baubles(); 
       f.add(dt); 
       f.pack(); 
       f.setLocationRelativeTo(null); 
       f.setVisible(true); 
      } 
     }); 
    } 

    public Baubles() { 
     this.setPreferredSize(new Dimension(8 * MAX, 8 * MAX)); 
     this.addComponentListener(new ComponentAdapter() { 

      @Override // relocate any outliers 
      public void componentResized(ComponentEvent e) { 
       for (Bauble bauble : queue) { 
        if (bauble.x > getWidth() || bauble.y > getHeight()) { 
         bauble.x = rnd.nextInt(getWidth()); 
         bauble.y = rnd.nextInt(getHeight()); 
        } 
       } 
      } 
     }); 
     timer.start(); 
    } 

    @Override 
    public void actionPerformed(ActionEvent e) { 
     if (queue.isEmpty()) { 
      for (int i = 0; i < MAX; i++) { 
       queue.add(randomBauble()); 
      } 
     } 
     queue.add(randomBauble()); 
     queue.remove(); 
     this.repaint(); 
    } 

    @Override 
    public void paintComponent(Graphics g) { 
     Graphics2D g2d = (Graphics2D) g; 
     g2d.setRenderingHint(
      RenderingHints.KEY_ANTIALIASING, 
      RenderingHints.VALUE_ANTIALIAS_ON); 
     g2d.setColor(Color.black); 
     g2d.fillRect(0, 0, getWidth(), this.getHeight()); 
     g2d.setComposite(ac); 
     for (Bauble b : queue) { 
      g2d.setColor(b.c); 
      g2d.fillOval(b.x, b.y, b.d, b.d); 
     } 
    } 

    private Bauble randomBauble() { 
     int x = rnd.nextInt(getWidth()); 
     int y = rnd.nextInt(getHeight()); 
     int r = rnd.nextInt(MAX) + MAX/2; 
     Color c = new Color(rnd.nextInt()); 
     return new Bauble(x, y, r, c); 
    } 

    private static class Bauble { 

     private int x, y, d; 
     private Color c; 

     public Bauble(int x, int y, int r, Color c) { 
      this.x = x - r; 
      this.y = y - r; 
      this.d = 2 * r; 
      this.c = c; 
     } 
    } 
} 
+2

Buon Natale si – mKorbel

+0

Ahha, un altro splendido esempio :-) –

+1

anche un candidato per [ "non utilizzare l'uso' setPreferredSize() 'quando si ha realmente intenzione di sovrascrivere' getPreferredSize() '"] (http://stackoverflow.com/a/7229662/230513). – trashgod