Je vais poster à nouveau ceci et essayer d'être plus précis et succinct cette fois-ci. J'ai installé WindowBuilder et l'ai utilisé pour générer mon code GUI.JLabel et JPanel - Dynamiquement en utilisant une interface graphique pour afficher des images différentes
J'ai donc mon interface graphique et tout ce qui se passe. WindowBuilder crée automatiquement une méthode appelée initialize() et c'est là que tout mon code GUI est.
J'ai copié beaucoup de mon code. Je pense que j'ai tout laissé pour identifier ce que j'essaie de faire.
Je ne suis pas sûr si le code ci-dessous fonctionne, étant expurgée et tout, mais en général, chaque fois que l'utilisateur clique sur le bouton « ROLL » sur l'interface graphique, il doit exécuter la rolldice() méthode, qui cycles un côté d'un dé pendant .1 secondes chacun, et enfin l'arrêt et l'atterrissage sur la valeur finale.
J'ai essayé comme une folle d'implémenter une méthode pour cela, mais tout ce que je fais concernant l'interface graphique en dehors de la classe initialize() ne fonctionne pas du tout - mais ne renvoie aucune erreur dans mon code . Toute aide serait appréciée!
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.Font;
import java.awt.Image;
import java.awt.Label;
import javax.swing.JScrollPane;
import javax.swing.JPanel;
import javax.swing.JOptionPane;
import java.util.*;
import javax.swing.JComboBox;
import java.awt.Color;
import javax.swing.SwingConstants;
public class PigDice {
public JFrame frame;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
PigDice window = new PigDice();
window.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}//Main Method
static void diceTumble(){
}
static void pausee(int x){
try {
Thread.sleep(x);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}//endsPause
/**
* Create the application.
*/
public PigDice() {
initialize();
}
/**
* Initialize the contents of the frame.
*/
private void initialize() {
frame = new JFrame();
frame.setBounds(100, 100, 1038, 892);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(null);
JPanel panel = new JPanel();
panel.setBounds(0, 0, 1016, 830);
frame.getContentPane().add(panel);
panel.setLayout(null);
JButton btnRoll = new JButton("Roll");
btnRoll.setFont(new Font("Tahoma", Font.BOLD, 24));
btnRoll.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
tumbleDice();
}
});
btnRoll.setBounds(292, 639, 135, 52);
panel.add(btnRoll);
}
static void tumbleDice(){
for(int i = 0; i < 25; i++){
sleep(100);
JPanel panel_1 = new JPanel();//panel for dice1
panel_1.setBounds(277, 393, 150, 150);
panel.add(panel_1);
panel_1.setLayout(null);
JPanel panel_2 = new JPanel();//panel for dice2
panel_2.setBounds(564, 393, 150, 150);
panel.add(panel_2);
panel_2.setLayout(null);
JLabel dice1 = new JLabel("dice1");
dice1.setHorizontalAlignment(SwingConstants.CENTER);
dice1.setBounds(0, 0, 150, 150);
Image die1 = new ImageIcon(this.getClass().getResource("" + tumble())).getImage();
dice1.setIcon(new ImageIcon(die1));
panel_1.add(dice1);
JLabel dice2 = new JLabel("dice2");
dice2.setHorizontalAlignment(SwingConstants.CENTER);
dice2.setBounds(0, 0, 150, 150);
Image die2 = new ImageIcon(this.getClass().getResource("" + tumble())).getImage();
dice2.setIcon(new ImageIcon(die2));
panel_2.add(dice2);
}//for loop
}//tumbleDice method
String tumble(){
int random = (int) (Math.random() * 6) + 1;
if(random == 1)
return "/side1.png";
if(random == 2)
return "/side2.png";
if(random == 3)
return "/side3.png";
if(random == 4)
return "/side4.png";
if(random == 5)
return "/side5.png";
return "/side6.png";
}
}//end PigDice
Je jetterai un coup d'œil sur Swing Timer et je regarderai dans setIcon de plus, ça sonne comme un très bon conseil! Que dois-je faire au lieu de mettre null à l'intérieur alors? –
Je vous avais déjà suggéré d'utiliser "layout managers". Le tutoriel contient des exemples de travail. Je suggère un simple FlowLayout est un bon endroit pour commencer à afficher deux dés. – camickr