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