Witam , mam taki problem . Program działa ,ale strasznie nie podoba mi się kod napisany przeze mnie.
A jako,że jestem początkujący w Javie prosiłbym o rady w celu usprawnienia działania tego programu.
Tak więc na początku może przedstawię zasadę działania progamu. Program ma działać coś ala "Milionerzy".
Na początku pobierana jest lista graczy i przyporządkowany jest im losowo wygenerowany czas.
Następnie osoba z najmniejszą wygenerowaną liczbą ,przystępuje do gry.Potem zastaną załadowane pytania, ale nie zamieściłem tej części gdyż tam już sobie poradzę ,najgorzej z tym początkiem całym.
Klasa Milioner - klasa główna.
import javax.swing.*;
import java.awt.event.ActionListener;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.io.*;
import java.util.ArrayList;
import java.util.Random;
import java.util.StringTokenizer;
import java.util.Collections;
import java.awt.event.ActionEvent;
public class Milioner {
static int wygrana = 0;
static JLabel stankonta = new JLabel("Stan konta"+ String.valueOf(wygrana));
static ArrayList<Osoba> gracze;
static final String delim = ";";
//Pobieranie z pliku graczy uczestniczących w grze.
public void pobierzGraczy(){
File plik = new File("gracze.txt");
gracze = new ArrayList<Osoba>();
try{
FileReader odczyt = new FileReader(plik);
String linia;
LineNumberReader czytaj = new LineNumberReader(odczyt);
StringTokenizer st;
while((linia = czytaj.readLine()) != null){
st = new StringTokenizer(linia,delim);
gracze.add(new Osoba(st.nextToken(),st.nextToken(),st.nextToken()));
}
}
catch(IOException e){
System.out.println("Blad odczytu");
}
}
public void wypisz(){
for(Osoba a :gracze){
System.out.println(a);
}
}
//Ustawianie ,który zawodnik zagra na podstawie wylosowanego czasu odp na pytanie.
public void czas_reakcji(){
Random rand = new Random();
Double czas;
for(Osoba a:gracze){
czas = rand.nextDouble();
a.czas_reakcji = czas;
}
}
public void sortuj(){
Collections.sort(gracze);
}
public void zaladuj_Gre(){
pobierzGraczy();
czas_reakcji();
sortuj();
}
public void gramy(){
//---------------Okno główne-----------
final Moje_Okno okno = new Moje_Okno();
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Milioner m = new Milioner();
m.zaladuj_Gre();
m.gramy();
}
}
Klasa osoba
public class Osoba implements Comparable{
private String imie;
private String nazwisko;
private String miasto;
Double czas_reakcji;
public Osoba(){
this.imie = "nieznane";
this.nazwisko = "nieznane";
this.miasto = "nieznane";
this.czas_reakcji = 0.00;
}
public Osoba(String imie,String nazwisko,String miasto){
this.imie = imie;
this.nazwisko = nazwisko;
this.miasto = miasto;
}
public String toString(){
return (this.imie + " " + this.nazwisko + " " + this.miasto /*+ " "+ this.czas_reakcji*/);
}
public String getImie(){
return this.imie;
}
public String getNazwisko(){
return this.nazwisko;
}
public String getMiasto(){
return this.miasto;
}
public void setImie(String imie){
this.imie = imie;
}
public void setNazwisko(String nazwisko){
this.nazwisko = nazwisko;
}
public void setMiasto(String miasto){
this.miasto = miasto;
}
public int compareTo(Object obj){
Double czas1 = ((Osoba)obj).czas_reakcji;
return this.czas_reakcji.compareTo(czas1);
}
}
Klasa moje_okno - klasa odpowiadajaca za stworzenie graficznej otoczki
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class Moje_Okno extends JFrame{
final JPanel gora;
final JPanel srodek;
final JPanel dol;
JPanel wygrana;
public Moje_Okno(){
setSize(700,600);
setLocation(300, 100);
setLayout(new BorderLayout());
Moje_Menu menu = new Moje_Menu();
setJMenuBar(menu);
//panel gora
gora = new JPanel();
gora.setBackground(new Color(153,204,255));
JLabel opis = new JLabel("Graj i wygraj 1 000 000 złotych :)");
gora.add(opis);
//panel srodek
srodek = new JPanel();
srodek.setBackground(new Color(153,204,255));
pokazGraczy(srodek);
//panel dol
dol = new JPanel();
dol.setBackground(new Color(153,204,255));
JLabel haslo = new JLabel("Stan sie pierwsza osoba w Polsce , ktora wygra milion");
dol.add(haslo);
final JButton start = new JButton("Zacznij Grę");
start.setBackground(new Color(213,156,220));
start.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
pokaz_Wyniki(srodek,gora,dol);
setVisible(true);
}
});
dol.add(start);
//dodanie do okna
this.add(gora,BorderLayout.NORTH);
this.add(srodek,BorderLayout.CENTER);
this.add(dol,BorderLayout.SOUTH);
this.setVisible(true);
}
public void pokazGraczy(JPanel panel){
panel.setLayout(new GridLayout(11,1));
JLabel powitanie = new JLabel("Dzisiaj grają z nami : ",JLabel.CENTER);
JLabel gracz1 = new JLabel(Milioner.gracze.get(0).toString(),JLabel.CENTER);
JLabel gracz2 = new JLabel(Milioner.gracze.get(1).toString(),JLabel.CENTER);
JLabel gracz3 = new JLabel(Milioner.gracze.get(2).toString(),JLabel.CENTER);
JLabel gracz4 = new JLabel(Milioner.gracze.get(3).toString(),JLabel.CENTER);
JLabel gracz5 = new JLabel(Milioner.gracze.get(4).toString(),JLabel.CENTER);
JLabel gracz6 = new JLabel(Milioner.gracze.get(5).toString(),JLabel.CENTER);
JLabel gracz7 = new JLabel(Milioner.gracze.get(6).toString(),JLabel.CENTER);
JLabel gracz8 = new JLabel(Milioner.gracze.get(7).toString(),JLabel.CENTER);
JLabel gracz9 = new JLabel(Milioner.gracze.get(8).toString(),JLabel.CENTER);
JLabel gracz10 = new JLabel(Milioner.gracze.get(9).toString(),JLabel.CENTER);
panel.add(powitanie);
panel.add(gracz1);
panel.add(gracz2);
panel.add(gracz3);
panel.add(gracz4);
panel.add(gracz5);
panel.add(gracz6);
panel.add(gracz7);
panel.add(gracz8);
panel.add(gracz9);
panel.add(gracz10);
}
public void pokaz_Wyniki(JPanel panel,JPanel panel1,JPanel panel2){
panel1.removeAll();
panel.removeAll();
panel2.removeAll();
//----------------wypełnienie dół--------------------------
JLabel zwyciezca = new JLabel("Do gry przystapi: " + Milioner.gracze.get(0).getImie()
+ " " + Milioner.gracze.get(0).getNazwisko(),JLabel.CENTER);
panel1.add(zwyciezca);
//---------------- wypełnienie środka------------------------
panel.setLayout(new GridLayout(10,1));
JLabel poz1 = new JLabel(Milioner.gracze.get(0).getImie() + " " + Milioner.gracze.get(0).getNazwisko(),JLabel.CENTER);
poz1.setBorder(BorderFactory.createLineBorder(new Color(132,231,122),10));
JLabel r1 = new JLabel(String.valueOf(Milioner.gracze.get(0).czas_reakcji),JLabel.CENTER);
r1.setBorder(BorderFactory.createLineBorder(new Color(132,231,122),10));
JLabel poz2 = new JLabel(Milioner.gracze.get(1).getImie() + " " +Milioner.gracze.get(1).getNazwisko(),JLabel.CENTER);
JLabel r2 = new JLabel(String.valueOf(Milioner.gracze.get(1).czas_reakcji),JLabel.CENTER);
JLabel poz3 = new JLabel(Milioner.gracze.get(2).getImie() + " " +Milioner.gracze.get(2).getNazwisko(),JLabel.CENTER);
JLabel r3 = new JLabel(String.valueOf(Milioner.gracze.get(2).czas_reakcji),JLabel.CENTER);
JLabel poz4 = new JLabel(Milioner.gracze.get(3).getImie() + " " + Milioner.gracze.get(3).getNazwisko(),JLabel.CENTER);
JLabel r4 = new JLabel(String.valueOf(Milioner.gracze.get(3).czas_reakcji),JLabel.CENTER);
JLabel poz5 = new JLabel(Milioner.gracze.get(4).getImie() + " " + Milioner.gracze.get(4).getNazwisko(),JLabel.CENTER);
JLabel r5 = new JLabel(String.valueOf(Milioner.gracze.get(4).czas_reakcji),JLabel.CENTER);
JLabel poz6 = new JLabel(Milioner.gracze.get(5).getImie() + " " +Milioner.gracze.get(5).getNazwisko(),JLabel.CENTER);
JLabel r6 = new JLabel(String.valueOf(Milioner.gracze.get(5).czas_reakcji),JLabel.CENTER);
JLabel poz7 = new JLabel(Milioner.gracze.get(6).getImie() + " " +Milioner.gracze.get(6).getNazwisko(),JLabel.CENTER);
JLabel r7 = new JLabel(String.valueOf(Milioner.gracze.get(6).czas_reakcji),JLabel.CENTER);
JLabel poz8 = new JLabel(Milioner.gracze.get(7).getImie() + " " +Milioner.gracze.get(7).getNazwisko(),JLabel.CENTER);
JLabel r8 = new JLabel(String.valueOf(Milioner.gracze.get(7).czas_reakcji),JLabel.CENTER);
JLabel poz9 = new JLabel(Milioner.gracze.get(8).getImie() + " " +Milioner.gracze.get(8).getNazwisko(),JLabel.CENTER);
JLabel r9 = new JLabel(String.valueOf(Milioner.gracze.get(8).czas_reakcji),JLabel.CENTER);
JLabel poz10 = new JLabel(Milioner.gracze.get(9).getImie() + " " +Milioner.gracze.get(9).getNazwisko(),JLabel.CENTER);
JLabel r10 = new JLabel(String.valueOf(Milioner.gracze.get(9).czas_reakcji),JLabel.CENTER);
panel.add(poz1);
panel.add(r1);
panel.add(poz2);
panel.add(r2);
panel.add(poz3);
panel.add(r3);
panel.add(poz4);
panel.add(r4);
panel.add(poz5);
panel.add(r5);
panel.add(poz6);
panel.add(r6);
panel.add(poz7);
panel.add(r7);
panel.add(poz8);
panel.add(r8);
panel.add(poz9);
panel.add(r9);
panel.add(poz10);
panel.add(r10);
//-------------wypełniamy górę-----------------
JLabel granie = new JLabel("Przystąp do gry",JLabel.CENTER);
JButton gra = new JButton("Graj");
gra.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
wczytajPytania(dol,srodek,gora);
setVisible(true);
}
});
panel2.add(granie);
panel2.add(gra);
add(panel1,BorderLayout.NORTH);
add(panel,BorderLayout.CENTER);
add(panel2,BorderLayout.SOUTH);
panel1.repaint();
panel.repaint();
panel2.repaint();
}
public void wczytajPytania(JPanel dol,JPanel srodek,JPanel gora){
gora.removeAll();
srodek.removeAll();
dol.removeAll();
//----Wypelniamy gore
gora.setLayout(new GridLayout(12,1));
JLabel w5 = new JLabel("1 - > 500 PLN");
w5.setBorder(BorderFactory.createLineBorder(Color.magenta));
JLabel w1 = new JLabel("2 - > 1000 PLN");
JLabel w2 = new JLabel("3 - > 2000 PLN");
JLabel w4 = new JLabel("4 - > 4000 PLN");
JLabel w8 = new JLabel("5 - > 8000 PLN");
JLabel w16 = new JLabel("6 - > 16000 PLN");
JLabel w32 = new JLabel("7 - > 32000 PLN");
JLabel w64 = new JLabel("8 - > 64000 PLN");
JLabel w125 = new JLabel("9 - > 125000 PLN");
JLabel w250 = new JLabel("10 - > 250000 PLN");
JLabel w500 = new JLabel("11 - > 500000 PLN");
JLabel w1000 = new JLabel("12 - > 1 000 000 PLN");
gora.add(w5);
gora.add(w1);
gora.add(w2);
gora.add(w4);
gora.add(w8);
gora.add(w16);
gora.add(w32);
gora.add(w64);
gora.add(w125);
gora.add(w250);
gora.add(w500);
gora.add(w1000);
gora.setOpaque(true);
add(gora,BorderLayout.EAST);
add(srodek,BorderLayout.CENTER);
// wypelniamy dol
dol.setOpaque(true);
dol.setLayout(new GridLayout(4,2,20,20));
JButton a = new JButton("A");
JButton b = new JButton("B");
JButton c = new JButton("C");
JButton d = new JButton("D");
a.setToolTipText("Może to dobra odpowiedź?");
b.setToolTipText("A może to jest dobra odpowiedź ?");
c.setToolTipText("Mi się wydaje ,że to jest dobra odpowiedz");
d.setToolTipText("Ale zastanów się ,może ta jest poprawna?");
JTextField oa = new JTextField("",20);
JTextField ob = new JTextField("",20);
JTextField oc = new JTextField("",20);
JTextField od = new JTextField("",20);
dol.add(a);
dol.add(oa);
dol.add(b);
dol.add(ob);
dol.add(c);
dol.add(oc);
dol.add(d);
dol.add(od);
add(dol,BorderLayout.SOUTH);
gora.repaint();
srodek.repaint();
dol.repaint();
}
}
Klasa moje_menu -zwykle jmenubar
public class Moje_Menu extends JMenuBar{
public Moje_Menu(){
setBackground(new Color(153,204,255));
JMenu plik = new JMenu("Plik");
JMenuItem graj = new JMenuItem("Nowa Gra");
graj.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
// nie mogę się dostać stąd do okna.
}
});
JMenuItem koniec = new JMenuItem("Koniec");
koniec.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
System.exit(0);
}
});
plik.add(graj);
plik.add(koniec);
//---------------Ustawienie skrótów klawiszowych
graj.setMnemonic(KeyEvent.VK_G);
graj.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_G,KeyEvent.CTRL_MASK));
koniec.setMnemonic(KeyEvent.VK_K);
koniec.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_K,KeyEvent.CTRL_MASK));
JMenu informacje = new JMenu("Informacje");
JMenuItem autorzy = new JMenuItem("Autorzy");
JMenuItem zasady = new JMenuItem("Zasady");
autorzy.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
JOptionPane.showMessageDialog(null, "Autorami programu sa: Sebastian Karsznia" +
"i Michał Wasilewski","Autorzy",1);
}
});
zasady.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
JOptionPane.showMessageDialog(null, "Graj i wygrywaj","Zasady",1);
}
});
informacje.add(autorzy);
informacje.add(zasady);
//----------ustawienie skrótów klawiszowych
autorzy.setMnemonic(KeyEvent.VK_A);
autorzy.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A,KeyEvent.CTRL_MASK));
zasady.setMnemonic(KeyEvent.VK_Z);
zasady.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Z,KeyEvent.CTRL_MASK));
//---------dodanie do głownego menu podmenu
add(plik);
add(informacje);
}
}
Problemem jest ,że chciałbym rozdzielić ten kod na więcej klas. Własne panele na przykład ,ale wtedy mam kłopoty z ich dostępnością z innych klas i nie wiem jak się za to zabrać ,gdyby komuś chciało się przeanalizować ten kod to byłbym wdzięczny.Pozdrawiam :))