Refakturering
Tjing!
Jag har strukturerat om lite i koden så den "funkar".
TarningsTabell.java
package javaprylar;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.util.Random;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class TarningsTabell extends JFrame {
Random slump = new Random();
int slumpatTal;
int totAntalKast;
private static int[] kast = new int[6];
public TarningsTabell() {
totAntalKast = 60;
genereraSlumpTalsTabell();
genereraJframe();
}
public TarningsTabell(int totAntalKast) {
this.totAntalKast = totAntalKast;
genereraSlumpTalsTabell();
genereraJframe();
}
public void genereraJframe() {
// Enklare att använda en gridbaglayout.
GridBagLayout gridbag = new GridBagLayout();
this.setLayout(gridbag);
this.setSize(300, 300);
this.setTitle("Tärning");
this.setResizable(false);
this.setLocation(400, 250);
this.getContentPane().setBackground(Color.WHITE);
// Deklarerar de ingående komponenterna här. Effektivare än inne i for-loopen.
JLabel eyesLabel;
JLabel countLabel;
Stapel stapel;
// Första kolumnens data.
GridBagConstraints gbc_col1 = new GridBagConstraints();
gbc_col1.anchor = GridBagConstraints.WEST; // Fäst komponenten i vänsterkanten.
gbc_col1.fill = GridBagConstraints.NONE; // Gör den så stor som den behöver vara.
gbc_col1.gridx = 0; // Sätt den i första kolumnen.
gbc_col1.weightx = 0; // Låt den inte överblivet utrymme. Labba med den här så ska du få se på roligheter.
gbc_col1.insets = new Insets(10,10,5,5); // Skapa en "ram" runt komponenten.
GridBagConstraints gbc_col2 = new GridBagConstraints();
gbc_col2.anchor = GridBagConstraints.WEST;
gbc_col2.fill = GridBagConstraints.NONE;
gbc_col2.gridx = 1; // Kolumn 2.
gbc_col2.weightx = 0;
gbc_col2.insets = new Insets(10,0,5,0);
GridBagConstraints gbc_col3 = new GridBagConstraints();
gbc_col3.anchor = GridBagConstraints.WEST;
gbc_col3.fill = GridBagConstraints.BOTH;
gbc_col3.gridx = 2; // Kolumn 3
gbc_col3.weightx = 1; // Ta all överbliven plats som det bara går.
gbc_col3.insets = new Insets(10,0,5,0);
for (int i = 0; i < kast.length; i++) {
// Det är bättre, säkare och effektivare att använda sig av
// Integer-klassens metoder.
eyesLabel = new JLabel(Integer.toString(i + 1));
eyesLabel.setPreferredSize(new Dimension(15, 20));
countLabel = new JLabel(Integer.toString(kast[i]));
countLabel.setPreferredSize(new Dimension(25, 20));
stapel = new Stapel(totAntalKast, kast[i]);
gbc_col1.gridy = i;
gbc_col2.gridy = i;
gbc_col3.gridy = i;
gridbag.setConstraints(eyesLabel, gbc_col1);
gridbag.setConstraints(countLabel, gbc_col2);
gridbag.setConstraints(stapel, gbc_col3);
this.add(eyesLabel);
this.add(countLabel);
this.add(stapel);
;
}
this.setVisible(true);
}
public void genereraSlumpTalsTabell() {
for (int i = 0; i < totAntalKast; i++) {
slumpatTal = slump.nextInt(6);
kast[slumpatTal]++;
}
for (int i = 0; i < kast.length; i++) {
System.out.println(i + 1 + " - " + (kast[i]));
}
}
}
Stapel.java
package javaprylar;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
@SuppressWarnings("serial")
// Ingen anledning att använda JPanel. Det är är en egen komponent.
public class Stapel extends Component
{
int totAntalKast;
int kastPerSida;
public Stapel(int totAntalKast,int kastPerSida){
this.totAntalKast = totAntalKast; //Dessa används sen i nedanstående metod
this.kastPerSida = kastPerSida; //Dessa används sen i nedanstående metod/
}
public void paint(Graphics g)
{
// 2D-grafiken har lite roligare och mer utvecklade grafiska metoder.
Graphics2D g2 = (Graphics2D) g;
g.setColor(Color.RED);
// Vi gör rektangel från övre högra hörnet av komponenten, alltså (0,0) i koordinatsystemet.
g2.fillRect(0,0,getProcent(), 20); // här ska höjd, längd och så ritas beroende på värderna ifrån konstruktorn.
}
public Dimension getPreferredSize(){
return new Dimension(450, 125);
}
private int getProcent()
{
double result = ((double)kastPerSida/(double)totAntalKast)*200d;
return (int)result;
}
}
TheDice är samma som du gjort. Fråga om det något du inte förstår.
