2017-12-23 22 views
-3

私の質問を1行で説明することは難しいので、私のプログラムの目的を説明することにしました。どのようなプログラムは基本的には、さまざまな色を使用して背景色を変更するものです。最初は赤、2番目は緑、3番目は青、4番目は驚き、5番目は白、デフォルトとも呼ばれます。Javaで値をリセットするにはどうすればよいですか?

これらのソースはすべて、キーボードショートカットを使用して呼び出すこともできます。まずJFrameクラス(The Marc)を作成し、次にJButtonを含むJPanelクラス(薄板またはパネル)を作成します。しかし、それを作成する前に、ランダムな色を作成するいくつかのコードがあります、それは驚きを使用する色ですJButton、ここに私の質問です。

私は実行ボタンを押して驚きのJButtonをクリックするか、キーボードを使用してランダムな色で背景をペイントします(今のところすべて正しいです)。

もう一度ボタンを押すと、以前に取得した色と同じ色になります。それで、JButton(驚き)は次回にそれを押すと、どのように新しい違う色を表示できますか?言い換えれば、プログラムウィンドウを再度開くことなく値をリセットするにはどうしたらいいですか?

以下は私のプログラムのコードとそのプログラムのイメージです。私はこれらが多くのテキストであることを知っていますが、私はその問題の記述方法を知らない。問題をより明確にするために、私は必要な目的を持った別のプログラムを組み込みましたが、ボタンは1つだけです(ランダムな色のボタン)。私は、驚きのボタンは、第2のプログラムのランダムなボタンのように動作します。ここで

Image of the program

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); 

    } 
} 
+3

はこのような何かを試してみてください。ランダムカラー計算をメソッドに入れて、 'Color randomColor = getRandomColor();'のような単純な関数を呼び出せるようにしてください。 actionPerformed()メソッドで、 "Sorprise"の名前をテストし、 backgound例: '(" Sorprise ".equals(getButtonValue(Action.NAME))setBackground(getRandomColor());' –

答えて

0

ランダムな色を生成し、あなたの現在のコードはこれです:

int valorDado1=(int) ((Math.random()*256)+extra); 
int valorDado2=(int) ((Math.random()*256)+extra); 
int valorDado3=(int) ((Math.random()*256)+extra); 

...より具体的には、この:

 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); 

それでは、これらのコード行に焦点を当ててみましょう

((Math.random()*256)+extra); 

上記はすべてピックです10と266だから、valorDado1以来、valorDado2、とvalorDado3間の数が最も可能性が高い255未満されている、あなたは

if(valorDado1<=255) { 
    valorDado1=valorDado1-extra; 
} 
if(valorDado2<=255) { 
    valorDado2=valorDado2-extra; 
} 
if(valorDado3<=255) { 
    valorDado3=valorDado3-extra; 
} 

if(valorDado1>255) { 
    valorDado1=valorDado1-extra; 
} 
if(valorDado2>255) { 
    valorDado2=valorDado2-extra; 
} 
if(valorDado3>255) { 
    valorDado3=valorDado3-extra; 
} 

を変更する必要がある(比較演算子が変更された注意してください)

+0

これで問題が解決するとは思わないが、色が変わるだけですが、私の質問は非常に異なっています。答えはactionPerformedメソッド(リスナー)にあると思います。かなり神ですが、ボタンは1つしかありません。プログラムに追加したいのですが...私の質問をアップグレードして他のプログラムを追加させてください。 – emmanuelcue

+0

ok let me knoあなたがそうするときにw ... –

+0

お返事ありがとう、私は私の2番目のプログラムを公開します。私は最初のプログラムのサプライズボタンは、2番目のプログラムのランダムボタンのように動作します。 :)また、私の質問に時間を割いてくれてありがとう。 – emmanuelcue

0

答えが見つかりました。これを行うには、ラミナのコンストラクタメソッドの外側でランダムな色を安定させる必要があります。あなたがそれをしないで、コンストラクタ内のランダムな色を設定する場合、coloralwaysは少なくともあなたがプログラムを閉じて再オープンするのと同じです。解決策は、別の抽象的なアクションクラスを作成することです。

最終的なコードはこれです:

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); 

     shortLamina laminax=new shortLamina(); 
     add(laminax); 

     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("Changing colors game!"); 



     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)"); 
     ActionRandom actionRandom=new ActionRandom("Random", randomcolor, "It paint the background with a random color (Ctrl X, 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 X"); 
     KeyStroke random_key2=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"); 
     inputmap.put(random_key2, "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); 

     } 

    } 

    private class ActionRandom extends AbstractAction{ 

     public ActionRandom(String nam, Color colorButton, String des) { 

      putValue(Action.NAME, nam); 
      putValue(Action.SHORT_DESCRIPTION, des); 
      putValue("background color", colorButton); 

     } 

     public void actionPerformed(ActionEvent e) { 
      // TODO Auto-generated method stub 

      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); 


     } 


    } 

} 
関連する問題