Sorry for disturbing this page.....I need help Again
I was trying to control the speed and the size of the ball with
menu...but is not working.....kindly help
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Formatter;
import javax.swing.*;
import java.io.File;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.border.BevelBorder;
import java.awt.geom.Ellipse2D;
import java.util.LinkedList;
import java.util.Queue;
import javax.sound.sampled.*;
public class second extends JPanel {
private static final int BOX_WIDTH = 600;
private static final int BOX_HEIGHT = 400;
private static final int RATE = 30;
private Ellipse2D circ;
private File soundFile = new File("resources/snd16.wav");
private Clip clip;
private Color numberColor = null;
private float ballRadius = 20;
private float ballX = 220 - ballRadius;
private float ballY = 220 - ballRadius;
private float ballSpeedX = 5;
private float ballSpeedY = 2;
private static final float N = 64;
//private final Queue<Color> clut = new LinkedList<Color>();
JMenuBar menubar = new JMenuBar();
JMenu menu = new JMenu("menu");
public second() {
JMenu speed = new JMenu("speed");
JMenu size = new JMenu("Size");
menu.add(speed);
menu.add(size);
JMenuItem big = new JMenuItem("Big");
JMenuItem small = new JMenuItem("small");
JMenuItem middium = new JMenuItem("Medium");
JMenuItem fast = new JMenuItem("Fast");
JMenuItem normal = new JMenuItem("Normal");
JMenuItem slow = new JMenuItem("Slow");
speed.add(fast);
speed.add(normal);
speed.add(slow);
size.add(big);
size.add(small);
size.add(middium);
menubar.add(menu);
//setJMenuBar(menubar);
setVisible(true);
this.setPreferredSize(new Dimension(BOX_WIDTH, BOX_HEIGHT));
// Prepare a Clip
try {
AudioInputStream audioInputStream =
AudioSystem.getAudioInputStream(soundFile);
AudioFormat audioFormat = audioInputStream.getFormat();
DataLine.Info dataLineInfo =
new DataLine.Info(Clip.class, audioFormat);
clip = (Clip) AudioSystem.getLine(dataLineInfo);
clip.open(audioInputStream);
} catch (Exception e) {
e.printStackTrace(System.err);
}
Timer timer = new Timer(1000 / RATE, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if(e.equals("Slow")){
ballSpeedX = 3;
}
ballX += ballSpeedX;
// ballY += ballSpeedY;
if (ballX - ballRadius < 0) {
ballSpeedX = -ballSpeedX;
ballX = ballRadius;
playSound();
} else if (ballX + ballRadius > BOX_WIDTH) {
ballSpeedX = -ballSpeedX;
ballX = BOX_WIDTH - ballRadius;
playSound();
}
repaint();
}
});
timer.start();
//add(menu);
fast.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
if(event.equals("Fast")){
//if(ballSpeedX==2)
ballSpeedX += 10;
}
}
});
slow.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
if(event.equals("Slow")){
ballSpeedX = 3;
}
//ballSpeedX = ballSpeedX + 3;
//System.exit(0);
}
});
normal.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
if(event.equals("Normal")){
ballSpeedX = ballSpeedX;
}
}
});
big.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
String Selection =event.getActionCommand();
if(Selection.equals("Big")){
ballRadius = 50;
}
}
});
}
// Play the sound in a separate thread.
private void playSound() {
Runnable soundPlayer = new Runnable() {
@Override
public void run() {
try {
clip.setMicrosecondPosition(0);
clip.start();
} catch (Exception e) {
e.printStackTrace();
}
}
};
new Thread(soundPlayer).start();
}
//private void getColors(){
// for (int i = 0; i < N; i++) {
// clut.add(Color.getHSBColor(i / N, 1, 1));
// }
// }
//public void paintComponent(Graphics g) {
// ...
// g.setColor(clut.peek());
// g.fillOval(...);
// clut.add(clut.remove());
// ...
//}
@Override
public void paintComponent(Graphics g) {
// for (int i = 0; i < N; i++) {
//clut.add(Color.getHSBColor(i / N, 1, 1));
super.paintComponent(g); // Paint background
g.setColor(Color.BLACK);
g.fillRect(0, 0, BOX_WIDTH, BOX_HEIGHT);
g.setColor(Color.RED);
g.fillOval(
(int) (ballX - ballRadius),
(int) (ballY - ballRadius),
(int) (2 * ballRadius), (int) (2 * ballRadius));
g.setColor(Color.WHITE);
g.setFont(new Font("Dialog", Font.PLAIN, 12));
StringBuilder sb = new StringBuilder();
Formatter formatter = new Formatter(sb);
formatter.format(
"Ball @(%3.0f) Speed=(%2.0f)", ballX, ballSpeedX);
g.drawString(sb.toString(), 20, 30);
}
public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
second ex = new second();
//ex.pane.setBorder(new
BevelBorder(BevelBorder.LOWERED));
JFrame frame = new JFrame("A Moving Ball");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setContentPane(new second());
frame.add(new second());
frame.setJMenuBar(ex.menubar);
frame.pack();
frame.setVisible(true);
}
});
}
}