2011-12-23 40 views
14

Có vẻ như là không thể sửa chữa Graphics2D thiếu trong mã, ở đó tôi phải thiết lập kích thước sửa chữa cho hình ảnh động, nếu không một số Bắt đầu bên ngoài Rectangle 490 x 490 đóng băng hoặc lắc trên màn hìnhĐi qua ngày hiện tại

tôi 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); 
    } 
} 

tôi muốn chúc mừng Christmast cho tất cả những người đóng góp Java ở đây

EDIT:

xin change private class Star extends Polygon { phương pháp move() để --->

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" chứa từ "ngắn";) – Bozho

+1

1 Chúc mừng Christmast cho bạn và tất cả những người đóng góp. Bạn có thể viết java. *; :) – adatapost

+0

và câu hỏi của bạn là ... :-) Các ngày lễ yên bình – kleopatra

Trả lời

11

Ví dụ dưới đây tạo MAX đồ trang trí cho cây của bạn. Nó sử dụng một số ComponentListener để di chuyển bất kỳ đồ trang trí xa lạ nào.

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

Giáng sinh vui vẻ bạn – mKorbel

+0

Ahha, một ví dụ tuyệt vời khác :-) –

+1

Cũng là một ứng cử viên cho ["Không sử dụng' setPreferredSize() 'khi bạn thực sự muốn ghi đè' getPreferredSize() '"] (http://stackoverflow.com/a/7229662/230513). – trashgod

Các vấn đề liên quan