První věc. Pokud se dohrabu k výsledku.
- Necpi ty věci do main. Tam to nemá co dělat. Takovou prasárnu by nenapsal ani Céčkař.
Takže to minimálně hoď celé do konstruktoru a to pak celé zavoléj jako instanci.
- Další prasárna: Nepiš název instancí s počátečním velkým písmenem, pak to evokuje volání statické metody!
- Nepoužívéj pro vkládání věcí (komponent) přímo JFrame. Od toho je JPanel a jeho potomci.
- Nepoužívéj vkládání komponent na absolutní pozici. To se v Javě nedělá. Od toho jsou Layout Managery (
http://docs.oracle.com/javase/tutorial/ ... using.html)
- To co jsi udělal v JLabel je sice pěkné, ale vzhledem, že Java podporuje různé Look&Feel Managery, tak se to nedělá.
- Nějak nerozumím tomu poli "nahCisla". K čemu to je dobré, když tam vygeneruji jednu hodnotu a tu pak předpokládám zjišťuji?
- Ten "Generátor" jsem přesunul do části co zachytává vyjímku. Přece jen se mi zdá, že hádat jedno vygenerované číslo asi není tak těžké. LOL
- Ten layout jsem neupravoval a pod Linuxem to vypadá šíleně.
- Určitě by se asi našel prostor pro vylepšování, Ten kód by se dal více rosekat, vyřešit lépe ten JFormattedTextField atd., ale venku je hezky a tak jsem to moc neřešil.
- Jo a ještě jedna taková věc hodná pozornosti: Někde si zjisti jaký rozdíl je mezi referenční proměnnou a primitivním datovým typem (int, long..) ve vztahu k metodám. Je to celkem záludná věc a velmi často se lidi diví co jim z té metody pak leze.
Doufám, že jsem aspoň trochu pomohl.
![;-] ;-]](./images/smilies/08.gif)
A nevím jak vy, ale já se jdu opalovat.
- Kód: Vybrat vše
package krulik.tode.cz;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.NumberFormat;
import java.util.Random;
import javax.swing.JButton;
import javax.swing.JFormattedTextField;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
/**
*
* @author Daniel Krůl
*/
public class ChytniCislo extends JPanel implements ActionListener {
private JFormattedTextField vysledek = null;
private JLabel dohromady = null;
private int[] nahCisla;
/**
* Constructor
*/
public ChytniCislo() {
JButton tlacitko = new JButton("Hotovo");
vysledek = new JFormattedTextField(NumberFormat.getInstance());
JLabel text = new JLabel(
"<html><font color='#00CC66' align='center' size='+1'>Vítejte v této minihře Chytni Číslo!</font><br> <font>Myslete na číslo od 1 do 10 a napište ho...</font></html>",
JLabel.CENTER);
dohromady = new JLabel("Výsledek...");
// NÁHODNÉ ČÍSLO = VYGENEROVÁNÍ PROMENNÉ nahCisla[i]
nahCisla = new int[10];
tlacitko.setBounds(110, 100, 100, 50);
vysledek.setBounds(110, 60, 100, 25);
text.setBounds(0, 0, 330, 50);
dohromady.setBounds(106, 160, 100, 50);
dohromady.setBackground(Color.WHITE);
tlacitko.addActionListener(this);
setLayout(null);
add(vysledek);
add(text);
add(tlacitko);
add(dohromady);
}
private int vypis(int arg) {
int temp = arg;
return temp;
}
@Override
public void actionPerformed(ActionEvent e) {
Random nahodne_cislo = new Random();
nahCisla[0] = nahodne_cislo.nextInt(10);
if ((vysledek.getValue() != null) && !"".equals(vysledek.getValue())) {
int cele = ((Number) vysledek.getValue()).intValue();
if (cele == nahCisla[0]) {
dohromady.setText("Trefa :( Číslo bylo:" + vypis(nahCisla[0]) + " )");
// System.out.println("Trefa :( Číslo bylo:" + vypis(nahCisla[0]) + " )");
} else {
dohromady.setText("Vedle :( Číslo bylo:" + vypis(nahCisla[0]) + " )");
// System.out.println("Vedle :( Číslo bylo:" + vypis(nahCisla[0]) + " )");
}
} else {
JOptionPane.showMessageDialog(this,"Žádná hodnota nebyla zadána.");
}
}
private static void createAndShowGUI() {
// Create and set up the window.
JFrame frame = new JFrame("Chytni číslo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// Add content to the window.
frame.setContentPane(new ChytniCislo());
// Display the window.
frame.pack();
frame.setVisible(true);
frame.setSize(330, 320);
frame.setLayout(null);
frame.setResizable(false);
frame.setLocationRelativeTo(null);
}
public static void main(String[] args) {
// Schedule a job for the event dispatching thread:
// creating and showing this application's GUI.
SwingUtilities.invokeLater(new Runnable() {
public void run() {
// Turn off metal's use of bold fonts
createAndShowGUI();
}
});
}
}