Ich mache eine Coursework-Zuweisung für die Uni, die Aufgabe ist, ein RectanglesGUI mit JPanel zu erstellen, aber ich habe ein Problem mit den Tasten, die ich erstellt habe.Ändern Sie die Farbe mit JButton, setzen Sie die Endbedingung für die Schleife auf unendlich
Die buttonSOUTH sollte folgend tun:
Wenn der Benutzer klickt auf der JButton im Süden der Region, die mit color1 gefüllten Rechtecken sollten alle in einen zufälligen Farbwechsel, während die Rechtecken mit color2 gefüllt sollte nicht ändern. Eine zweite klicken Sie auf die JButton sollte die Rechtecke mit color2 alle in eine zufällige Farbe ändern, während die Rechtecke mit einer zufälligen Farbe beim ersten Klick gefüllt werden, sollte die gleiche Farbe bleiben. Der Benutzer sollte in der Lage sein, weiterhin unbegrenzt auf die Schaltfläche zu klicken, und mit jedem Klick wird ein Satz Rechtecke mit einer zufälligen Farbe gefüllt.
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);
}
}
}
}
}
Aber ich weiß nicht, wie dies zu setzen unendlich sein
for (int i = 0; i < 100; i++){
if (i % 2 == 0) {
color1 = c.getColor1();
frame.repaint();
}
else {
color2 = c.getColor2();
frame.repaint();
}
}
Wenn Sie in die Probe stellen etwas nicht Ausdrucksteil (lösche das 'i <100' und lasse es einfach leer), das macht die for-Schleife unendlich. – lemuel
Ich bin müde, sobald ich auf den Knopf klopfe, wird die Schleifenausführung fortgesetzt und das Programm hängt, bis ich es beende (ich denke, das ist normal mit for-loop unendlich), aber was ich wirklich brauche, ist jedes Mal zwischen color1 und color2 umzuschalten Ich klicke auf den Knopf ohne Einschränkung (was 100 hier ist) Ich könnte es auf 999999999 setzen, aber wie man es unendlich macht? –
Oh, ich glaube ich habe es falsch verstanden. Meinst du, du kannst den Knopf nur 100 Mal mit dem aktuellen Code anklicken? – lemuel