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 :))