2013-12-09 97 views
0

我有一個應該在JPanel上有閃屏的程序,點擊按鈕後應該顯示另一個JPanel(類的對象)並繪製形狀。我嘗試刪除飛濺JPanel和之後,添加JPanel繪圖,但它does not不工作。我該如何解決它?兩個JLabel應該在屏幕的中心,它應該在2行上。如何製作初始屏幕

import java.awt.Color; 
import java.awt.Graphics; 
import java.awt.Graphics2D; 
import java.awt.event.MouseAdapter; 
import java.awt.event.MouseEvent; 
import java.awt.geom.Ellipse2D; 
import java.awt.geom.Point2D; 
import java.awt.geom.Rectangle2D; 
import java.util.ArrayList; 
import java.util.Random; 

import javax.swing.JComponent; 

/** 
* 
* @author Taras 
*/ 
public class MyComponent extends JComponent { 
    int i; 
    Color randColor; 

    public MyComponent() 
    { 
     this.i = i; 
     addMouseListener(new MouseHandler()); 
    } 

    private ArrayList<Rectangle2D> arrOfRect=new ArrayList<>(); 
    private ArrayList<Ellipse2D> arrOfEllipse=new ArrayList<>(); 
    // private ArrayList<Color> randColor = new ArrayList<>(); 
    Random rand = new Random(); 
public void paintComponent(Graphics g) { 
    super.paintComponent(g); 
    Graphics2D g2 = (Graphics2D) g; 

    for (Rectangle2D r : arrOfRect) { 
     g.setColor(new Color(rand.nextFloat(), rand.nextFloat(), rand.nextFloat())); 
     g2.draw(r); 

    } 
    for (Ellipse2D e : arrOfEllipse) { 
     g.setColor(new Color(rand.nextFloat(), rand.nextFloat(), rand.nextFloat())); 
     g2.draw(e); 
    } 

} 
    public void add(Point2D p) 
    { 
     double x=p.getX(); 
     double y=p.getY(); 
     if (Pole.i == 1){ 
       Ellipse2D ellipse = new Ellipse2D.Double(x, y, 100,100); 
       //randColor = new Color(randRed(), randGreen(), randBlue()); 

       arrOfEllipse.add(ellipse); 
      } 
     if (Pole.i == 2){ 
     Rectangle2D rectangls=new Rectangle2D.Double(x, y, 100, 100); 
     arrOfRect.add(rectangls); 

     } 
     if (Pole.i == 3){ 
     Rectangle2D rectangls=new Rectangle2D.Double(x, y, 150, 100); 
     arrOfRect.add(rectangls); 

     } 
     if (Pole.i == 4){ 
       Ellipse2D ellipse = new Ellipse2D.Double(x, y, 100,50); 
       arrOfEllipse.add(ellipse); 
      } 
    } 
    private class MouseHandler extends MouseAdapter { 
     public void mousePressed(MouseEvent event) 
     { 
      add(event.getPoint()); 
      //Color rColor = new Color(randRed(), randGreen(), randBlue()); 
      //randColor.add(rColor); 
      repaint(); 

     } 

    } 

    private int randRed() { 
     int red; 
     Random randomNumber = new Random(); 
     red = randomNumber.nextInt(255); 
     return red; 
    } 

    private int randGreen() { 
     int green; 
     Random randomNumber = new Random(); 
     green = randomNumber.nextInt(255); 
     return green; 
    } 

    private int randBlue() { 
     int blue; 
     Random randomNumber = new Random(); 
     blue = randomNumber.nextInt(255); 
     return blue; 
    } 
} 





import java.awt.BorderLayout; 
import java.awt.EventQueue; 
import java.awt.Font; 
import java.awt.GridLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.BoxLayout; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.JSeparator; 
import javax.swing.JToolBar; 
import javax.swing.SwingConstants; 
import javax.swing.border.EmptyBorder; 
import org.omg.CosNaming.NameComponent; 

public class Pole extends JFrame { 

    public static int i; 
public static JPanel nameContainer = new JPanel(new GridLayout(2, 1)); 
public static JFrame frame= new JFrame("Shape Stamper!"); 

    public static void main(String[] args) { 




    JPanel container; 

    JButton circle = new JButton("Circle"); 
    JButton square = new JButton("Square"); 
     JButton rectangle = new JButton("Rectangle"); 
     JButton oval = new JButton("Oval"); 
     JLabel programName = new JLabel("Shape Stamper!"); 
     JLabel programmerName = new JLabel("Progrramed by: "); 

    Font font = new Font("Serif", Font.BOLD, 32); 
    programName.setFont(font); 
    font = new Font("Serif", Font.ITALIC, 16); 
    programmerName.setFont(font); 

    programName.setHorizontalAlignment(JLabel.CENTER); 

    programmerName.setHorizontalAlignment(JLabel.CENTER); 
    //programmerName.setVerticalAlignment(JLabel.CENTER); 
    // nameContainer.setLayout(new BorderLayout()); 
    nameContainer.add(programName); 
    nameContainer.add(programmerName); 
    //nameContainer.setLayout(new BoxLayout(nameContainer, BoxLayout.X_AXIS)); 
     container = new JPanel(new GridLayout(1, 4)); 
     container.add(circle); 
     container.add(square); 
     container.add(rectangle); 
     container.add(oval); 


    circle.addActionListener(new ActionListener() { 

      @Override 
      public void actionPerformed(ActionEvent e) { 
       i = 1; 
       frame.remove(nameContainer); 
       frame.repaint(); 
       System.out.println(i); 
      } 
     }); 

    square.addActionListener(new ActionListener() { 

      @Override 
      public void actionPerformed(ActionEvent e) { 
       i = 2; 
      } 
     }); 

    rectangle.addActionListener(new ActionListener() { 

      @Override 
      public void actionPerformed(ActionEvent e) { 
       i = 3; 
      } 
     }); 

    oval.addActionListener(new ActionListener() { 

      @Override 
      public void actionPerformed(ActionEvent e) { 
       i = 4; 
      } 
     }); 


    MyComponent shape = new MyComponent(); 
     frame.setSize(500, 500); 

     frame.add(shape, BorderLayout.CENTER); 

     frame.add(container, BorderLayout.SOUTH); 



     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setVisible(true); 
} 
} 

回答

0

下面是使用圖像製作閃屏的示例。

import java.awt.*; 
import java.awt.image.BufferedImage; 
import java.io.IOException; 
import java.net.URL; 
import java.util.logging.Level; 
import java.util.logging.Logger; 
import javax.imageio.ImageIO; 
import javax.swing.*; 

public class CircleSplashScreen { 

    public CircleSplashScreen() { 
     JFrame frame = new JFrame(); 
     frame.getContentPane().add(new ImagePanel()); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setUndecorated(true); 
     frame.pack(); 
     frame.setLocationRelativeTo(null); 
     frame.setBackground(new Color(0, 0, 0, 0)); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       new CircleSplashScreen(); 
      } 
     }); 
    } 

    @SuppressWarnings("serial") 
    public class ImagePanel extends JPanel { 

     BufferedImage img; 

     public ImagePanel() { 
      setOpaque(false); 
      setLayout(new GridBagLayout()); 
      try { 
       img = ImageIO.read(new URL("http://www.iconsdb.com/icons/preview/royal-blue/stackoverflow-4-xxl.png")); 
      } catch (IOException ex) { 
       Logger.getLogger(CircleSplashScreen.class.getName()).log(Level.SEVERE, null, ex); 
      } 

     } 

     @Override 
     protected void paintComponent(Graphics g) { 
      super.paintComponent(g); 
      g.drawImage(img, 0, 0, getWidth(), getHeight(), this); 
     } 

     @Override 
     public Dimension getPreferredSize() { 
      return new Dimension(500, 500); 
     } 
    } 
} 

enter image description here