私はUniの教材割り当てを行っています。割り当てはJPanelでRectangleGUIを作成することですが、作成したボタンに問題があります。JButtonで色を変更し、forループの終了条件を無限に設定します
buttonSOUTHは、次のことを行うことになって:
ユーザーはSOUTH領域でのJButtonをクリックすると、カラー1で満たさ 矩形はカラー2で満たされた矩形はべきであるが、ランダムな色にすべて変更する必要があります 変化しない。 2番目の JButtonをクリックすると矩形がcolor2で塗りつぶされます ランダムな色に変更されますが、最初のクリックでランダムに塗りつぶされた矩形は同じ色を維持してください。 ユーザーは ボタンを無期限にクリックすることができます。クリックするたびに の矩形がランダムな色で塗りつぶされます。
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
public class RectanglesGUI {
JFrame frame;
RectangleDrawPanel drawPanel;
Color color1 = Color.orange;
Color color2 = Color.blue;
public static void main (String[] args) {
RectanglesGUI gui = new RectanglesGUI();
gui.go();
}
//this method sets up the JFrame
public void go() {
frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
drawPanel = new RectangleDrawPanel();
frame.getContentPane().add(BorderLayout.CENTER, drawPanel);
frame.getContentPane().setBackground(Color.black);
frame.setSize(600,600);
frame.setVisible(true);
CreateButton newButton = new CreateButton();
newButton.CreateButton();
frame.repaint();
}
// To Create a new Button
public class CreateButton {
JButton buttonSOUTH;
JButton buttonNORTH;
public void CreateButton() {
buttonSOUTH = new JButton("Change Colors");
buttonSOUTH.setPreferredSize(new Dimension(100, 50));
buttonSOUTH.setVisible(true);
frame.add(buttonSOUTH, BorderLayout.SOUTH);
buttonSOUTH.addActionListener(new RandomColorListener());
buttonNORTH = new JButton("Reset Colors");
buttonNORTH.setPreferredSize(new Dimension(100, 50));
buttonNORTH.setVisible(true);
frame.add(buttonNORTH, BorderLayout.NORTH);
buttonNORTH.addActionListener(new ResetListener());
}
// ActionListener for buttonSOUTH
private class ResetListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
color1 = Color.orange;
color2 = Color.blue;
frame.repaint();
}
}
// ActionListener for buttonNORTH
private class RandomColorListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
ChangeColor c = new ChangeColor();
for (int i = 0; i < 100; i++){
if (i % 2 == 0) {
color1 = c.getColor1();
frame.repaint();
} else {
color2 = c.getColor2();
frame.repaint();
}
}
}
}
// Change Color Class
private class ChangeColor {
private Color getColor1(){
Random fill1 = new Random();
color1 = new Color (fill1.nextInt(256), fill1.nextInt(256),
fill1.nextInt(256));
return color1;
}
private Color getColor2(){
Random fill2 = new Random();
color2 = new Color (fill2.nextInt(256), fill2.nextInt(256),
fill2.nextInt(256));
return color2;
}
}
}
class RectangleDrawPanel extends JPanel {
public void paintComponent (Graphics g){
super.paintComponent(g);
Graphics2D g2=(Graphics2D)g;
int width = getWidth();
int height = getHeight();
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
int x = (getWidth()/5) * i;
int y = (getHeight()/5) * j;
if ((i % 2) == (j % 2)) {
g2.setColor(color1);
} else
g2.setColor(color2);
g2.fill3DRect(x,y,width,height,true);
}
}
}
}
}
しかし、私は、これは無限大になるように設定する方法がわからない
for (int i = 0; i < 100; i++){
if (i % 2 == 0) {
color1 = c.getColor1();
frame.repaint();
}
else {
color2 = c.getColor2();
frame.repaint();
}
}
:私は、%2は、0と1
はにクラスRandomColorListenerでのactionPerformedメソッド内のコードを変更し、その後
boolean status=false;
RectangleGuiクラスにこのプロパティを追加戻りますので、 ( 'i <100'を削除して空にしておけば)forループを無限にします。 – lemuel
私はボタンをクリックするとループ実行が続き、プログラムが終了するまで(私はそれがfor-loop infiniteで普通だと思いますが)本当に必要なのは、毎回color1とcolor2を切り替えることです無制限にボタンをクリックします(ここでは100です)。999999999に設定できますが、無限にするにはどうすればいいですか? –
ああ、私は誤解したと思う。現在のコードで100回だけボタンをクリックできるということですか? – lemuel