私の質問を1行で説明することは難しいので、私のプログラムの目的を説明することにしました。どのようなプログラムは基本的には、さまざまな色を使用して背景色を変更するものです。最初は赤、2番目は緑、3番目は青、4番目は驚き、5番目は白、デフォルトとも呼ばれます。Javaで値をリセットするにはどうすればよいですか?
これらのソースはすべて、キーボードショートカットを使用して呼び出すこともできます。まずJFrame
クラス(The Marc)を作成し、次にJButton
を含むJPanel
クラス(薄板またはパネル)を作成します。しかし、それを作成する前に、ランダムな色を作成するいくつかのコードがあります、それは驚きを使用する色ですJButton
、ここに私の質問です。
私は実行ボタンを押して驚きのJButton
をクリックするか、キーボードを使用してランダムな色で背景をペイントします(今のところすべて正しいです)。
もう一度ボタンを押すと、以前に取得した色と同じ色になります。それで、JButton(驚き)は次回にそれを押すと、どのように新しい違う色を表示できますか?言い換えれば、プログラムウィンドウを再度開くことなく値をリセットするにはどうしたらいいですか?
以下は私のプログラムのコードとそのプログラムのイメージです。私はこれらが多くのテキストであることを知っていますが、私はその問題の記述方法を知らない。問題をより明確にするために、私は必要な目的を持った別のプログラムを組み込みましたが、ボタンは1つだけです(ランダムな色のボタン)。私は、驚きのボタンは、第2のプログラムのランダムなボタンのように動作します。ここで
import java.awt.event.*;
import java.awt.*;
import javax.swing.*;
public class Shortcut {
public static void main(String[] args) {
// TODO Auto-generated method stub
//Open the Window when execute the program.
shortMarc marc1=new shortMarc();
}
}
//Create the Window.
class shortMarc extends JFrame{
public shortMarc() {
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Toolkit myscreen=Toolkit.getDefaultToolkit();
Dimension screenSize=myscreen.getScreenSize();
int heightScreen=screenSize.height;
int widthScreen=screenSize.width;
setSize(widthScreen/2, heightScreen/2);
setLocation(widthScreen/4, heightScreen/4);
setTitle("Hello My World!");
shortLamina laminax=new shortLamina();
add(laminax);
Image icon1=myscreen.getImage("blackcircle.png");
setIconImage(icon1);
}
}
//Create a layer above the marc.
class shortLamina extends JPanel{
public shortLamina() {
//It creates an object that contain a random color to use it later on the program.
int extra=10;
int valorDado1=(int) ((Math.random()*256)+extra);
int valorDado2=(int) ((Math.random()*256)+extra);
int valorDado3=(int) ((Math.random()*256)+extra);
if(valorDado1>255) {
valorDado1=valorDado1-extra;
}
if(valorDado2>255) {
valorDado2=valorDado2-extra;
}
if(valorDado3>255) {
valorDado3=valorDado3-extra;
}
Color randomcolor=new Color(valorDado1, valorDado2, valorDado3);
// Create the user tangible objects. In this case the buttons.
ActionColor actionGreen=new ActionColor("Green", new ImageIcon("green.png"), Color.GREEN, "It makes the background green (Ctrl G)");
ActionColor actionBlue=new ActionColor("Blue", new ImageIcon("blue.png"), Color.BLUE, "It makes the background blue (Ctrl B)");
ActionColor actionRed=new ActionColor("Red", new ImageIcon("red.png"), Color.RED, "It makes the background red (Ctrl R");
ActionColor actionDefault=new ActionColor("Default", Color.WHITE, "It makes the background white, the default color (Ctrl D)");
ActionColor actionRandom=new ActionColor("Sorprise", randomcolor, "It paint the background with a random color (Ctrl S)");
JButton button1=new JButton(actionGreen);
JButton button2=new JButton(actionBlue);
JButton button3=new JButton(actionRed);
JButton button4=new JButton(actionDefault);
JButton button5=new JButton(actionRandom);
add(button3);
add(button1);
add(button2);
add(button5);
add(button4);
//Assign the key combinations.
InputMap inputmap=getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);//Step 1. Create a InputMap. It indicates wherre is the source object.
KeyStroke green_key=KeyStroke.getKeyStroke("ctrl G");// Step 2. Create a Key combination.
KeyStroke blue_key=KeyStroke.getKeyStroke("ctrl B");
KeyStroke red_key=KeyStroke.getKeyStroke("ctrl R");
KeyStroke default_key=KeyStroke.getKeyStroke("ctrl D");
KeyStroke random_key=KeyStroke.getKeyStroke("ctrl S");
inputmap.put(green_key, "green_background"); //Step 3. Asign the key to the place of the sorce object.
inputmap.put(blue_key, "blue_background");
inputmap.put(red_key, "red_background");
inputmap.put(default_key, "default_background");
inputmap.put(random_key, "random_background");
ActionMap actionmap=getActionMap();//Step 4. Create an object of type "action map" (instanciar) in spanish, to use it methods.
actionmap.put("green_background", actionGreen);//Step 5. Asign the object of the key combination to the action created before using the method put of the actionmap object.
actionmap.put("blue_background", actionBlue);
actionmap.put("red_background", actionRed);
actionmap.put("default_background", actionDefault);
actionmap.put("random_background", actionRandom);
}
//Create the class that asign the constructor methods to the buttons.
private class ActionColor extends AbstractAction{
//Constructor method 1.
public ActionColor(String nam, Icon icon, Color colorButton, String des) {
putValue(Action.NAME, nam);
putValue(Action.SMALL_ICON, icon);
putValue(Action.SHORT_DESCRIPTION, des);
putValue("background color", colorButton);
}
//Constructor method 2.
public ActionColor(String nam, Color colorButton, String des) {
putValue(Action.NAME, nam);
putValue(Action.SHORT_DESCRIPTION, des);
putValue("background color", colorButton);
}
//The listener class. It recive the instructions.
public void actionPerformed(ActionEvent e) {
Color c=(Color) getValue("background color");
setBackground(c);
}
}
}
私が望むように動作し、私の第二のプログラム、であるが、それは唯一のボタンがあります。このボタンを私の他のプログラムに組み込みたいのですが、どうすればいいのか分かりません。私の質問がより明確になることを願っています。
import java.awt.event.*;
import java.awt.*;
import javax.swing.*;
import java.util.*;
public class ChangingColors {
public static void main(String[] args) {
// TODO Auto-generated method stub
colorMarc marc1=new colorMarc();
}
}
class colorMarc extends JFrame{
public colorMarc() {
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Toolkit myscreen=Toolkit.getDefaultToolkit();
Dimension screenSize=myscreen.getScreenSize();
int heightScreen=screenSize.height;
int widthScreen=screenSize.width;
setSize(736, 524);
setLocation(widthScreen/4, heightScreen/4);
setTitle("Hello Color!!!");
//Lamina part.
lamina4 mylamina=new lamina4();
add(mylamina);
}
}
//Lamina.
class lamina4 extends JPanel implements ActionListener{
JButton buttonToChange=new JButton("Change color");
//int valorDado = (int)Math.random()*255+1;
public lamina4() {
add(buttonToChange);
buttonToChange.addActionListener(this);
}
public void actionPerformed(ActionEvent e) {
int extra=10;
int valorDado1=(int) ((Math.random()*256)+extra);
int valorDado2=(int) ((Math.random()*256)+extra);
int valorDado3=(int) ((Math.random()*256)+extra);
if(valorDado1>255) {
valorDado1=valorDado1-extra;
}
if(valorDado2>255) {
valorDado2=valorDado2-extra;
}
if(valorDado3>255) {
valorDado3=valorDado3-extra;
}
Color randomcolor=new Color(valorDado1, valorDado2, valorDado3);
/*System.out.println(valorDado1);
System.out.println(valorDado2);
System.out.println(valorDado3);
System.out.println();*/
setBackground(randomcolor);
}
}
はこのような何かを試してみてください。ランダムカラー計算をメソッドに入れて、 'Color randomColor = getRandomColor();'のような単純な関数を呼び出せるようにしてください。 actionPerformed()メソッドで、 "Sorprise"の名前をテストし、 backgound例: '(" Sorprise ".equals(getButtonValue(Action.NAME))setBackground(getRandomColor());' –