我正在为一个项目做老虎机。我无法JButton
从中生成新的随机数ArrayList
。我可以在程序启动并进行actionlistener
设置时将数字随机化,但是它不能满足我的需求。它仅用于测试目的。
我Actionlistener
在另一个Java文件中。一切正常,我只是无法弄清楚如何在占位符产生新的随机量plc1
,plc2
以及plc3
按钮被按下时。
我刚刚在大约3周前才开始真正编码。 请不要讨厌,这是我有史以来的第一个项目。
package GGCGuiLotto;
import java.util.ArrayList;
import java.awt.Color;
import java.awt.Image;
import java.awt.BorderLayout;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.Icon;
import javax.swing.JOptionPane;
import javax.swing.JLabel;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JTextField;
import java.util.Random;
public class GGCGuiLotto {
public static void main(String[] args) {
//Arraylist of images
ImageIcon pic0 = new ImageIcon("pics/pic1.png");
ImageIcon pic1 = new ImageIcon("pics/pic2.png");
ImageIcon pic2 = new ImageIcon("pics/pic3.png");
ImageIcon pic3 = new ImageIcon("pics/pic4.png");
ImageIcon pic4 = new ImageIcon("pics/pic5.png");
ImageIcon pic5 = new ImageIcon("pics/pic6.png");
ImageIcon pic6 = new ImageIcon("pics/pic7.png");
final ArrayList<ImageIcon> slotlist = new ArrayList<ImageIcon>();
slotlist.add(pic0);
slotlist.add(pic1);
slotlist.add(pic2);
slotlist.add(pic3);
slotlist.add(pic4);
slotlist.add(pic5);
slotlist.add(pic6);
Random ran = new Random();
int plc1 = ran.nextInt(4);
int plc2 = ran.nextInt(4);
int plc3 = ran.nextInt(4);
//generates the frame and the labels are added.
JFrame frame = new JFrame();
frame.setSize (400,275);
frame.setTitle("GGC Lotto Slots Rcorbin");
frame.setResizable(false);
frame.setVisible(true);
JPanel pnlReels = new JPanel();
frame.add(pnlReels);
JPanel aReel1 = new JPanel();
aReel1.setBackground(new Color(25,25,112));
aReel1.setBounds(15,10,100,100);
JPanel bReel2 = new JPanel();
bReel2.setBackground(new Color(25,25,112));
bReel2.setBounds(145,10,100,100);
JPanel cReel3 = new JPanel();
cReel3.setBackground(new Color(25,25,112));
cReel3.setBounds(275,10,100,100);
pnlReels.add(aReel1);
pnlReels.add(bReel2);
pnlReels.add(cReel3);
JLabel aReel1lbl = new JLabel();
JLabel bReel2lbl = new JLabel();
JLabel cReel3lbl = new JLabel();
aReel1.add(aReel1lbl);
bReel2.add(bReel2lbl);
cReel3.add(cReel3lbl);
aReel1lbl.setIcon(slotlist.get(plc1));
bReel2lbl.setIcon(slotlist.get(plc2));
cReel3lbl.setIcon(slotlist.get(plc3));
//jbutton
JButton slotbtn1 = new JButton();
slotbtn1.setText("GGC LOTTO Click ME");
pnlReels.add(slotbtn1);
slotbtn1.setBounds(145,50,100,75);
//FirstGuiListener act = new FirstGuiListener();
//slotbtn1.addActionListener((ActionListener) act);
GenPLCListener genPLC = new GenPLCListener();
slotbtn1.addActionListener((genPLC));
{}
if (plc1 == plc2 && plc1 == plc3 && plc2 == plc3)
{
JOptionPane.showConfirmDialog(null,"Winner! Play Again? ","GGC Lotto Slots RCorbin ",JOptionPane.YES_NO_OPTION);
//System.out.println("Winner");
}
else
{
//JOptionPane.showMessageDialog(null,"No Winner Winner Chicken Dinner ! ");
System.out.println("Crazy"); }
}
}
package GGCGuiLotto;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;
import javax.swing.JOptionPane;
class GenPLCListener extends GGCGuiLotto implements ActionListener{
public void actionPerformed(ActionEvent event){
System.out.println("Works");
JOptionPane.showConfirmDialog(null,"Choose Wisely. ","Click If you Trust!",JOptionPane.YES_NO_OPTION);
}
}
尝试extends GGCGuiLotto
做不会按照您的预期去做,这使您可以访问 相同的 实例变量。所以摆脱它。相反,您可以 通过引用
将当前实例GGCGuiLotto
传递给侦听器。并具有一些getter和setter方法来从GGCGuiLotto
类中访问所需的变量。我的意思可能是这样的事情(不确定您要完成的工作,因此仅是示例)。
public class GenPLCListener implements ActionListener {
private GGCGuiLotto lotto;
public GenPLCListener(GGCGuiLotto lotto) {
this.lotto = lotto;
}
@Override
public void actionPerfomred(ActionEvent e) {
List<ImageIcon> slotList = lotto.getSlotList();
Collections.shuffle(slotList); // shuffle the list
// do something else if need be.
}
}
创建侦听器时,将this
其传递给它。this
作为…的实例GGCGuiLotto
很少注意事项
Swing程序与控制台程序不同。您不想在main
方法中做任何事情。首先,main
可以将方法中的代码放入构造函数中。然后GGCGuiLotto
在main
方法中创建一个实例。
Swing应用程序应在事件调度线程上运行。请参阅初始线程
对于您的问题,也许更合适的解决方案是interface
使用pullSlot
可以在GGCGuiLotto
类中重写的方法,然后将方法传递interface
给侦听器并在pullSlot
您的方法中调用该方法actionPerformed
。像这样
public interface PullInterface {
public void pullSlot();
}
public class GGCGuiLotto implements PullInterface {
ArrayList<ImageIcon> slotList = new ArrayList<>(); // global scope.
JLabel aReel1lbl = new JLabel();
JLabel bReel2lbl = new JLabel();
JLabel cReel3lbl = new JLabel();
Random rand = new Random();
public GGCGuiLotto() {
GenPLCListener listener = new GenPLCListener(this);
}
@Override
public void pullSlot() {
// do what you need to do here to implement a pulling of the lever
int r1 = rand.nextInt(slotList.size());
int r2 = rand.nextInt(slotList.size());
int r3 = rand.nextInt(slotList.size());
reel1lbl.setIcon(slotList.get(r1));
}
}
public class GenPLCListener implement ActionListener {
private PullInterface pull;
public GenPLCListener(PullInterface pull) {
this.pull = pull;
}
@Override
public void actionPerformed(ActionEvent e) {
pull.pullSlot();
}
}
我有一个类Main(它具有公共静态void Main(String[]args))和另一个类MyDocument。 Main类中存在一个变量,我想从MyDocument类中的函数alphabetOccurrence()访问该变量。我该怎么做呢?我不想用它作为静态变量。任何修改只能在函数中进行,其余的代码应该保持不变。
我是java新手,我不知道如何从另一个类访问变量 我正在尝试编写一个代码来发送带有未存储在本地的附件的邮件。我想访问SendMail类中ExcelFile类中编写的变量 如何在另一个类中访问excelFileAsByte并发送邮件而不将其存储在本地。我可以使用addBodyPart和ByteArrayResource将文件添加为附件吗。
然后在'main'类中,我将'panel'添加到JFrame中。 我的问题是,我正在尝试实现一个actionListener到一个添加在'Panel'类内部的按钮。actionListener函数将添加更多按钮并使用G.DrawString的按钮。现在,我要将ActionListener放置在哪里,以便这样做呢?如何将g.drawString用于特定的面板,而g.drawString行位于另一个类
问题内容: 您好我是Java的初学者,这是我的问题:我有带有以下变量的第一堂课: 我也有这堂课: 我的问题是:我想将number1和number2变量存储到ArrayList中,然后从类test中访问此ArrayList。我怎样才能做到这一点? 问题答案: 和测试类:
问题内容: 是否可以从Java中的另一个类访问一个类中变量的实例。 假设您在A类中具有以下条件: 我想对此类中的队列进行更改,然后可以使用它从另一个类中对其进行访问。 我如何从另一个类访问缓冲区的实例?可能吗? 问题答案: 添加吸气剂: 然后,如果您有Whatever的实例: