Witam,
Potrzebuje pomocy w przerobieniu kodu w taki sposób żeby przenieść z WatekAI komunikat o przegranej do klasy SwingWindow i tak się znajdowała synchronizacja. Próbowałem to robić na wiele sposób ale nic nie wychodzi (komunikat po prostu nie wyskakuje)
Starter.java
import java.awt.*;
public class Starter {
public static void main(String[] args) throws InterruptedException {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new SwingWindow();
}
});
}
}
SwingWindow.java
import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
public class SwingWindow extends JFrame implements KeyListener {
private Container container;
JProgressBar progressBar1;
JProgressBar progressBar2;
JButton Start;
PullRope pullRope = new PullRope();
public SwingWindow() {
super("ProgressBar");
setResizable(false);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(1020, 200);
setLocation(500, 400);
setLayout(new FlowLayout());
container = getContentPane();
progressBar1 = new JProgressBar();
progressBar1.setPreferredSize(new Dimension(500, 100));
progressBar1.setValue(50);
progressBar1.setForeground(container.getBackground());
progressBar1.setBackground(Color.GREEN);
container.add(progressBar1, BorderLayout.WEST);
progressBar2 = new JProgressBar();
progressBar2.setPreferredSize(new Dimension(500,100));
progressBar2.setValue(50);
progressBar2.setForeground(Color.RED);
container.add(progressBar2, BorderLayout.EAST);
Component frame = null;
int n = JOptionPane.showConfirmDialog(
frame, "Czy chcesz rozpocząć gre?",
"Przeciąganie liny",
JOptionPane.YES_NO_OPTION);
if (n == JOptionPane.YES_OPTION) {
addKeyListener(this);
setVisible(true);
WatekAI watekAI = new WatekAI(progressBar1,progressBar2);
watekAI.start();
} else if (n == JOptionPane.NO_OPTION) {
System.exit(0);
}
}
@Override
public void keyTyped(KeyEvent e) {
}
@Override
public void keyPressed(KeyEvent e) {
}
@Override
public void keyReleased(KeyEvent e) {
if (e.getKeyCode() == 32) {
if (progressBar1.getValue() > 0 && progressBar2.getValue() < 100) {
pullRope.pull(progressBar1,progressBar2);
if(progressBar2.getValue() == 0 )
{
Component frame = null;
int n = JOptionPane.showConfirmDialog(
frame, "Wygrałeś! Czy chcesz rozpocząć gre jeszcze raz?",
"Przeciąganie liny",
JOptionPane.YES_NO_OPTION);
if (n == JOptionPane.YES_OPTION) {
if (Thread.currentThread().isInterrupted()) return;
Thread.yield();
progressBar2.setValue(50);
progressBar1.setValue(50);
WatekAI watekAI = new WatekAI(progressBar1,progressBar2);
watekAI.start();
} else if (n == JOptionPane.NO_OPTION) {
System.exit(0);
}
}
}
}
}
}
PullRope.java
import javax.swing.*;
public class PullRope {
void pullAI(JProgressBar progressBar1,JProgressBar progressBar2)
{
if(progressBar2.getValue() > 0 || progressBar1.getValue() == 100)
{
progressBar2.setValue(progressBar2.getValue() + 1 );
progressBar1.setValue(progressBar1.getValue() + 1);
}
}
void pull(JProgressBar progressBar1,JProgressBar progressBar2) {
if(progressBar1.getValue() < 100 || progressBar2.getValue() == 0){
progressBar1.setValue(progressBar1.getValue() - 1);
progressBar2.setValue(progressBar2.getValue() - 1);
}
}
}
WatekAI.java
import java.awt.Component;
import javax.swing.*;
public class WatekAI extends Thread{
private JProgressBar progressBar1;
private JProgressBar progressBar2;
PullRope pullRope = new PullRope();
public WatekAI(JProgressBar progressBar1, JProgressBar progressBar2) {
this.progressBar1 = progressBar1;
this.progressBar2 = progressBar2;
}
@Override
public void run(){
while(progressBar1.getValue() > 0 && progressBar2.getValue() < 100){
pullRope.pullAI(progressBar1,progressBar2);
if(progressBar2.getValue() == 100 )
{
Component frame1 = null;
int n1 = JOptionPane.showConfirmDialog(
frame1, "Przegrałeś! Czy chcesz rozpocząć gre jeszcze raz?",
"Przeciąganie liny",
JOptionPane.YES_NO_OPTION);
if (n1 == JOptionPane.YES_OPTION) {
if (Thread.currentThread().isInterrupted()) return;
Thread.yield();
progressBar2.setValue(50);
progressBar1.setValue(50);
} else if (n1 == JOptionPane.NO_OPTION) {
System.exit(0);
}
}
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
private void setVisible(boolean b) {
// TODO Auto-generated method stub
}
private void addKeyListener(WatekAI watekAI) {
// TODO Auto-generated method stub
}
}