如何制作启动画面

时间:2013-12-09 02:18:06

标签: java swing graphics awt

我有一个应该在JPanel上有闪屏的程序,按钮点击后应该显示另一个JPanel(类的对象)并绘制形状。我尝试删除启动JPanel,然后添加JPanel进行绘图,但它无法正常工作。我该如何解决?两个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);
}
}

1 个答案:

答案 0 :(得分: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