在JPanel中集成仿真

时间:2018-07-06 07:01:10

标签: java swing user-interface netbeans-8

我当时使用Netbeans Java Swing制作GUI。在下面给出的图像中是GUI的正面设计。我需要模拟在黑色背景的选项卡式窗格中创建的Jpanel中的弹跳球。我试图为此添加代码,但无法理解应该在自动生成的NetBeans代码中将代码添加到何处。

Jframe Image of Front End

    import java.awt.Color;
    import java.awt.Font;
    import java.awt.Graphics;
    import java.util.Formatter;


    /**
     * @author Shubham
     */
    public class BilliardInt extends javax.swing.JFrame {

    private static Object frame;
    /**
     * Creates new form BilliardInt
     */
    public BilliardInt() {
        initComponents();
    }

    /**
     * This method is called from within the constructor to initialize the form.
     */
    @SuppressWarnings("unchecked")
    private void initComponents() {

        headerPanel3 = new javax.swing.JLabel();
        headerPanel2 = new javax.swing.JLabel();
        headerPanel = new javax.swing.JPanel();
        billLabel = new javax.swing.JLabel();
        simLabel = new javax.swing.JLabel();
        mainPanel = new javax.swing.JPanel();
        tabbedPane = new javax.swing.JTabbedPane();
        intTabbedPanel = new javax.swing.JPanel();
        jLabel12 = new javax.swing.JLabel();
        tabbedPanel1 = new javax.swing.JTabbedPane();
        jPanel8 = new javax.swing.JPanel();
        simGui = new javax.swing.JPanel();
        playButtonInt = new javax.swing.JButton();
        resetButtonInt = new javax.swing.JButton();
        comboBoxInt = new javax.swing.JComboBox<>();
        videoIntPanel = new javax.swing.JPanel();
        jPanel5 = new javax.swing.JPanel();
        jLabel13 = new javax.swing.JLabel();
        jScrollPane2 = new javax.swing.JScrollPane();
        jTextArea1 = new javax.swing.JTextArea();
        jButton3 = new javax.swing.JButton();
        pseudoTabbedPanel = new javax.swing.JPanel();
        jLabel8 = new javax.swing.JLabel();
        jLabel11 = new javax.swing.JLabel();
        jTextArea2 = new javax.swing.JTextArea();
        jButton2 = new javax.swing.JButton();
        tabbedPanel3 = new javax.swing.JTabbedPane();
        jPanel10 = new javax.swing.JPanel();
        simGui1 = new javax.swing.JPanel();
        playButtonPseudo = new javax.swing.JButton();
        resetButtonPseudo = new javax.swing.JButton();
        comboBoxPseudo = new javax.swing.JComboBox<>();
        videoIntPanel1 = new javax.swing.JPanel();
        chaoticTabbedPannel = new javax.swing.JPanel();
        jLabel6 = new javax.swing.JLabel();
        jLabel7 = new javax.swing.JLabel();
        jTextArea3 = new javax.swing.JTextArea();
        jButton1 = new javax.swing.JButton();
        tabbedPanel2 = new javax.swing.JTabbedPane();
        jPanel16 = new javax.swing.JPanel();
        simGui2 = new javax.swing.JPanel();
        playButtonChaotic = new javax.swing.JButton();
        resetButtonChaotic = new javax.swing.JButton();
        comboBoxChaotic = new javax.swing.JComboBox<>();
        videoIntPanel2 = new javax.swing.JPanel();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setBackground(new java.awt.Color(0, 153, 153));
        setResizable(false);

        headerPanel3.setIcon(new 
            javax.swing.ImageIcon(getClass().getResource("/resources/background-pattern-design-5.jpg"))); // NOI18N

        headerPanel2.setIcon(new 
            javax.swing.ImageIcon(getClass().getResource("/resources/background-pattern-design-5.jpg"))); // NOI18N

        headerPanel.setBackground(new java.awt.Color(51, 51, 51));
        headerPanel.setBorder(new javax.swing.border.SoftBevelBorder(javax.swing.border.BevelBorder.RAISED));

        billLabel.setFont(new java.awt.Font("PT Sans Narrow", 1, 36)); // NOI18N
        billLabel.setForeground(new java.awt.Color(255, 255, 255));
        billLabel.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        billLabel.setText("Bill");

        simLabel.setFont(new java.awt.Font("Savoye LET", 3, 48)); // NOI18N
        simLabel.setForeground(new java.awt.Color(255, 255, 255));
        simLabel.setText("Sim");

        javax.swing.GroupLayout headerPanelLayout = new javax.swing.GroupLayout(headerPanel);
        headerPanel.setLayout(headerPanelLayout);
        headerPanelLayout.setHorizontalGroup(
            headerPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(headerPanelLayout.createSequentialGroup()
                .addGap(144, 144, 144)
                .addComponent(billLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 72, 
                    javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(0, 0, 0)
                .addComponent(simLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 62, 
                    javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        headerPanelLayout.setVerticalGroup(
            headerPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(headerPanelLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(headerPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(simLabel)
                    .addComponent(billLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 57, 
                        javax.swing.GroupLayout.PREFERRED_SIZE)))
        );

        mainPanel.setBackground(new java.awt.Color(0, 102, 102));

        tabbedPane.setBackground(new java.awt.Color(0, 204, 204));

        intTabbedPanel.setBackground(new java.awt.Color(0, 102, 102));

        jLabel12.setBackground(new java.awt.Color(0, 102, 102));
        jLabel12.setFont(new java.awt.Font("Snell Roundhand", 1, 36)); // NOI18N
        jLabel12.setText("Integral");

        jPanel8.setBackground(new java.awt.Color(255, 255, 255));

        simGui.setBackground(new java.awt.Color(51, 51, 51));

        javax.swing.GroupLayout simGuiLayout = new javax.swing.GroupLayout(simGui);
        simGui.setLayout(simGuiLayout);
        simGuiLayout.setHorizontalGroup(
            simGuiLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 0, Short.MAX_VALUE)
        );
        simGuiLayout.setVerticalGroup(
            simGuiLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 361, Short.MAX_VALUE)
        );

        playButtonInt.setText("Play");
        playButtonInt.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                playButtonIntActionPerformed(evt);
            }
        });

        resetButtonInt.setText("Reset");

        comboBoxInt.setModel(new javax.swing.DefaultComboBoxModel<>(new String[] 
            { "System a", "System b", "System c", "System d", " " }));

        javax.swing.GroupLayout jPanel8Layout = new javax.swing.GroupLayout(jPanel8);
        jPanel8.setLayout(jPanel8Layout);
        jPanel8Layout.setHorizontalGroup(
            jPanel8Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(simGui, javax.swing.GroupLayout.DEFAULT_SIZE, 
                javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
            .addGroup(jPanel8Layout.createSequentialGroup()
                .addGap(80, 80, 80)
                .addComponent(playButtonInt)
                .addGap(18, 18, 18)
                .addComponent(resetButtonInt)
                .addGap(18, 18, 18)
                .addComponent(comboBoxInt, javax.swing.GroupLayout.PREFERRED_SIZE, 
                    javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(47, Short.MAX_VALUE))
        );
        jPanel8Layout.setVerticalGroup(
            jPanel8Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel8Layout.createSequentialGroup()
                .addComponent(simGui, javax.swing.GroupLayout.PREFERRED_SIZE, 
                    javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(8, 8, 8)
                .addGroup(jPanel8Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(playButtonInt, javax.swing.GroupLayout.DEFAULT_SIZE, 
                        javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(comboBoxInt)
                    .addComponent(resetButtonInt, javax.swing.GroupLayout.DEFAULT_SIZE, 
                        javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                .addContainerGap())
        );

        tabbedPanel1.addTab("Simulation", jPanel8);
        tabbedPanel1.addTab("Video", videoIntPanel);

        jPanel5.setBackground(new java.awt.Color(0, 102, 102));

        jLabel13.setFont(new java.awt.Font("Sana", 1, 24)); // NOI18N
        jLabel13.setText("Billiard System");

        javax.swing.GroupLayout jPanel5Layout = new javax.swing.GroupLayout(jPanel5);
        jPanel5.setLayout(jPanel5Layout);
        jPanel5Layout.setHorizontalGroup(
            jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel5Layout.createSequentialGroup()
                .addGap(0, 0, 0)
                .addComponent(jLabel13)
                .addContainerGap(61, Short.MAX_VALUE))
        );
        jPanel5Layout.setVerticalGroup(
            jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel5Layout.createSequentialGroup()
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addComponent(jLabel13)
                .addContainerGap())
        );

        jScrollPane2.setHorizontalScrollBar(null);

        jTextArea1.setEditable(false);
        jTextArea1.setColumns(20);
        jTextArea1.setFont(new java.awt.Font("Lucida Grande", 0, 14)); // NOI18N
        jTextArea1.setRows(5);
        jTextArea1.setText("Introduction :- \n\nA billiard.");
        jTextArea1.setWrapStyleWord(true);
        jTextArea1.setLineWrap(true);
        jTextArea1.setAutoscrolls(false);
        jTextArea1.setDragEnabled(false);
        jTextArea1.setMaximumSize(new java.awt.Dimension(640, 2147483647));
        jScrollPane2.setViewportView(jTextArea1);

        jButton3.setText("Detail");

        javax.swing.GroupLayout intTabbedPanelLayout = new javax.swing.GroupLayout(intTabbedPanel);
        intTabbedPanel.setLayout(intTabbedPanelLayout);
        intTabbedPanelLayout.setHorizontalGroup(
            intTabbedPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(intTabbedPanelLayout.createSequentialGroup()
                .addComponent(tabbedPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, 
                    450, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGroup(intTabbedPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jScrollPane2)
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, 
                        intTabbedPanelLayout.createSequentialGroup()
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 275, Short.MAX_VALUE)
                        .addGroup(intTabbedPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, 
                                intTabbedPanelLayout.createSequentialGroup()
                                .addComponent(jLabel12, javax.swing.GroupLayout.PREFERRED_SIZE, 
                                    137, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addGap(0, 0, 0)
                                .addComponent(jPanel5, javax.swing.GroupLayout.PREFERRED_SIZE, 
                                    javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addGap(164, 164, 164))
                            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, 
                                intTabbedPanelLayout.createSequentialGroup()
                                .addComponent(jButton3)
                                .addGap(340, 340, 340))))))
        );
        intTabbedPanelLayout.setVerticalGroup(
            intTabbedPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(intTabbedPanelLayout.createSequentialGroup()
                .addGroup(intTabbedPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, 
                    false)
                    .addComponent(jPanel5, javax.swing.GroupLayout.DEFAULT_SIZE, 
                        javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(jLabel12, javax.swing.GroupLayout.DEFAULT_SIZE, 
                        javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 403, 
                    javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jButton3)
                .addGap(0, 180, Short.MAX_VALUE))
            .addGroup(intTabbedPanelLayout.createSequentialGroup()
                .addGap(19, 19, 19)
                .addComponent(tabbedPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, 450, 
                    javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        tabbedPane.addTab("Integrable", intTabbedPanel);

        pseudoTabbedPanel.setBackground(new java.awt.Color(0, 102, 102));

        jLabel8.setBackground(new java.awt.Color(0, 102, 102));
        jLabel8.setFont(new java.awt.Font("Snell Roundhand", 1, 36)); // NOI18N
        jLabel8.setText("Pseudo-Integral");

        jLabel11.setFont(new java.awt.Font("Sana", 1, 24)); // NOI18N
        jLabel11.setText("System");

        jTextArea2.setEditable(false);
        jTextArea2.setColumns(20);
        jTextArea2.setFont(new java.awt.Font("Lucida Grande", 0, 14)); // NOI18N
        jTextArea2.setRows(5);
        jTextArea2.setWrapStyleWord(true);
        jTextArea2.setLineWrap(true);
        jTextArea2.setAutoscrolls(false);
        jTextArea2.setDragEnabled(false);
        jTextArea2.setMaximumSize(new java.awt.Dimension(640, 2147483647));

        jButton2.setText("Detail");

        jPanel10.setBackground(new java.awt.Color(255, 255, 255));

        simGui1.setBackground(new java.awt.Color(51, 51, 51));

        javax.swing.GroupLayout simGui1Layout = new javax.swing.GroupLayout(simGui1);
        simGui1.setLayout(simGui1Layout);
        simGui1Layout.setHorizontalGroup(
            simGui1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 0, Short.MAX_VALUE)
        );
        simGui1Layout.setVerticalGroup(
            simGui1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 361, Short.MAX_VALUE)
        );

        playButtonPseudo.setText("Play");
        playButtonPseudo.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                playButtonPseudoActionPerformed(evt);
            }
        });

        resetButtonPseudo.setText("Reset");

        comboBoxPseudo.setModel(new javax.swing.DefaultComboBoxModel<>(new String[] 
            { "System a", "System b", "System c", "System d", " " }));

        javax.swing.GroupLayout jPanel10Layout = new javax.swing.GroupLayout(jPanel10);
        jPanel10.setLayout(jPanel10Layout);
        jPanel10Layout.setHorizontalGroup(
            jPanel10Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(simGui1, javax.swing.GroupLayout.DEFAULT_SIZE, 
                javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
            .addGroup(jPanel10Layout.createSequentialGroup()
                .addGap(80, 80, 80)
                .addComponent(playButtonPseudo)
                .addGap(18, 18, 18)
                .addComponent(resetButtonPseudo)
                .addGap(18, 18, 18)
                .addComponent(comboBoxPseudo, javax.swing.GroupLayout.PREFERRED_SIZE, 
                    javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(47, Short.MAX_VALUE))
        );
        jPanel10Layout.setVerticalGroup(
            jPanel10Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel10Layout.createSequentialGroup()
                .addComponent(simGui1, javax.swing.GroupLayout.PREFERRED_SIZE, 
                    javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(8, 8, 8)
                .addGroup(jPanel10Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(playButtonPseudo, javax.swing.GroupLayout.DEFAULT_SIZE, 
                        javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(comboBoxPseudo)
                    .addComponent(resetButtonPseudo, javax.swing.GroupLayout.DEFAULT_SIZE, 
                        javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                .addContainerGap())
        );

        tabbedPanel3.addTab("Simulation", jPanel10);
        tabbedPanel3.addTab("Video", videoIntPanel1);

        javax.swing.GroupLayout pseudoTabbedPanelLayout = new javax.swing.GroupLayout(pseudoTabbedPanel);
        pseudoTabbedPanel.setLayout(pseudoTabbedPanelLayout);
        pseudoTabbedPanelLayout.setHorizontalGroup(
            pseudoTabbedPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(pseudoTabbedPanelLayout.createSequentialGroup()
                .addGap(0, 0, 0)
                .addComponent(tabbedPanel3, javax.swing.GroupLayout.PREFERRED_SIZE, 
                    450, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGroup(pseudoTabbedPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(pseudoTabbedPanelLayout.createSequentialGroup()
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 
                            javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addComponent(jLabel8, javax.swing.GroupLayout.PREFERRED_SIZE, 256, 
                            javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(0, 0, 0)
                        .addComponent(jLabel11)
                        .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, 
                        pseudoTabbedPanelLayout.createSequentialGroup()
                        .addGap(272, 382, Short.MAX_VALUE)
                        .addComponent(jButton2)
                        .addGap(340, 340, 340))
                    .addGroup(pseudoTabbedPanelLayout.createSequentialGroup()
                        .addGap(0, 0, 0)
                        .addComponent(jTextArea2, javax.swing.GroupLayout.DEFAULT_SIZE, 
                            javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addGap(0, 0, 0))))
        );
        pseudoTabbedPanelLayout.setVerticalGroup(
            pseudoTabbedPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(pseudoTabbedPanelLayout.createSequentialGroup()
                .addGroup(pseudoTabbedPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel8)
                    .addComponent(jLabel11, javax.swing.GroupLayout.PREFERRED_SIZE, 
                        48, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(0, 0, 0)
                .addComponent(jTextArea2, javax.swing.GroupLayout.PREFERRED_SIZE, 
                    399, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jButton2)
                .addGap(0, 184, Short.MAX_VALUE))
            .addGroup(pseudoTabbedPanelLayout.createSequentialGroup()
                .addGap(19, 19, 19)
                .addComponent(tabbedPanel3, javax.swing.GroupLayout.PREFERRED_SIZE, 
                    450, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        tabbedPane.addTab("Pseudo-Integrable", pseudoTabbedPanel);

        );

        pack();
    }

    public static void main(String args[]) {

        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException | InstantiationException 
            | IllegalAccessException | javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(BilliardInt.class.getName()).log(java.util.logging.Level.SEVERE, 
                null, ex);
        }
        java.awt.EventQueue.invokeLater(() -> {
            new BilliardInt().setVisible(true);
        });
    }

上面的代码是从NetBeans生成的代码,下面给出的是我要集成到其中的代码。

  import java.awt.*;
import java.util.Formatter;
import javax.swing.*;

public class BouncingBallSimple extends JPanel {
   private static final int BOX_WIDTH = 429;
   private static final int BOX_HEIGHT = 402;

   private float ballRadius = 3;
   private float ballX = 0;
   private float ballY = 480; 
   private float ballSpeedX = 3;
   private float ballSpeedY = 2;

   private static final int UPDATE_RATE = 50;

   public BouncingBallSimple() {
      this.setPreferredSize(new Dimension(BOX_WIDTH, BOX_HEIGHT));

      Thread gameThread;
       gameThread = new Thread() {
           @Override
           public void run() {
               while (true) { 
                   ballX += ballSpeedX;
                   ballY += ballSpeedY;
                   if (ballX - ballRadius < 0) {
                       ballSpeedX = -ballSpeedX; 
                       ballX = ballRadius;
                   } else if (ballX + ballRadius > BOX_WIDTH) {
                       ballSpeedX = -ballSpeedX;
                       ballX = BOX_WIDTH - ballRadius;
                   }
                   if (ballY - ballRadius < 0) {
                       ballSpeedY = -ballSpeedY;
                       ballY = ballRadius;
                   } else if (ballY + ballRadius > BOX_HEIGHT) {
                       ballSpeedY = -ballSpeedY;
                       ballY = BOX_HEIGHT - ballRadius;
                   }
                   repaint(); 
                   try {
                       Thread.sleep(1000 / UPDATE_RATE);
                   } catch (InterruptedException ex) { }
               }
           }
       };
      gameThread.start();
   }

   @Override
   public void paintComponent(Graphics g) {
      super.paintComponent(g);
      g.setColor(Color.BLACK);
      g.fillRect(0, 0, BOX_WIDTH, BOX_HEIGHT);

      g.setColor(Color.BLUE);
      g.fillOval((int) (ballX - ballRadius), (int) (ballY - ballRadius),
            (int)(2 * ballRadius), (int)(2 * ballRadius));

      g.setColor(Color.WHITE);
      g.setFont(new Font("Courier New", Font.PLAIN, 12));
      StringBuilder sb = new StringBuilder();
      Formatter formatter = new Formatter(sb);
      formatter.format("Ball @(%3.0f,%3.0f) Speed=(%2.0f,%2.0f)", ballX, ballY,
            ballSpeedX, ballSpeedY);
      g.drawString(sb.toString(), 20, 30);
   }

   public static void main(String[] args) {
      javax.swing.SwingUtilities.invokeLater(() -> {
          JFrame frame = new JFrame("A Bouncing Ball");
          frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
          frame.setContentPane(new BouncingBallSimple());
          frame.pack();
          frame.setVisible(true);
      });
   }
}

0 个答案:

没有答案