ユーザーがボタンを押して乱数を生成するプログラムを作成しています。その数によって、JLabel に表示されるテキストが決まります。プログラムの動作方法は、メインの JFrame が「Work」というボタンを保持し、「Get a new job」というボタンで別の JFrame を開き、結果とともに JLabel を表示するというものです。ランダムに生成された数値を保持する変数を、数値ジェネレーター クラスから「作業」ボタンの ActionListener クラスに渡すことができないようです。また、JLabel を使用してその JFrame を終了し、再度開いた場合に、JLabel を閉じる前のテキストが表示され、デフォルトのテキストなしにリセットされないように、JLabel にテキストを保存するにはどうすればよいでしょうか。詳細が必要な場合はお知らせください。
メインクラス:
import java.awt.BorderLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class Main{
public static void main(String [] args){
JFrame main = new JFrame("This is the real life!");
main.setSize(500,500);
main.setResizable(false);
main.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
main.setVisible(true);
JPanel mainPanel = new JPanel(new GridBagLayout());
main.getContentPane().add(mainPanel, BorderLayout.NORTH);
GridBagConstraints c = new GridBagConstraints();
JLabel mainText = new JLabel("This is your life.");
c.gridx = 50;
c.gridy = 50;
c.insets = new Insets(50,10,10,10);
mainPanel.add(mainText, c);
JButton workButton = new JButton("Work");
c.gridx = 50;
c.gridy = 75;
c.insets = new Insets(150,10,10,10);
mainPanel.add(workButton, c);
workButton.addActionListener(new workButtonAction());
}
}
「作業」ボタン ActionListener クラス:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class workButtonAction extends numGeneratorAction implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
JFrame workFrame = new JFrame("Your job");
workFrame.setSize(250,250);
workFrame.setResizable(false);
workFrame.setVisible(true);
JPanel workPanel = new JPanel();
workFrame.add(workPanel);
JButton numGenerator = new JButton("Get a new job.");
workPanel.add(numGenerator);
numGenerator.addActionListener(new numGeneratorAction());
JLabel Job = new JLabel();
numGeneratorAction generatorObject = new numGeneratorAction();
generatorObject.actionPerformed(e);
if(job == 0){ //The job variable is not recognized in this class.
Job.setText("Text will go here.");
}
}
}
ナンバ ジェネレータ クラス:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;
public class numGeneratorAction implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
int job;
Random dice = new Random();
job = dice.nextInt(4);
System.out.println(job);
}
}