0

setColorandgetColorメソッドを使用して JPanel の色を変更しています。

ここで、 100 ミリ秒すべてgetColorを呼び出している関数でボタンをクリックする必要がないように変更したいと思います。getColor

しかし、Google を何度も使用した後、その方法を見つけることができません。

これで私を助けてくれることを願っています。

コード

package tutorial9a;

/**
 *
 * @author HiveMind
 */
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.awt.Color;
import java.util.Timer;

// 1. Import 
// hier fehlt Code: zwei Imports
// hier fehlt Code: eine Implementierung
public class Tutorial09a extends JFrame implements ActionListener {

    private static int st_fensternummer = 0;
    private int fensternummer = 0;
    // global fuer addActionListener
    JButton bnCreate = new JButton("create1");
    JButton bnsetBlue = new JButton("setBlue");
    JButton bnsetRed = new JButton("setRed");
    JButton bnsetGreen = new JButton("setGreen");
    JButton bnClose = new JButton("Close");
    JPanel panelBn = new JPanel();
    Farbe farbe = Farbe.getInstance();
    
    

    public Tutorial09a(Farbe farbe) {
        this.farbe = farbe;
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setGUI();
    }

    private void setGUI() {
        setSize(800, 100);
        fensternummer = ++st_fensternummer;
        setTitle("Tutorial09a: " + fensternummer);

        this.getContentPane().setLayout(new BorderLayout());

        panelBn.setLayout(new FlowLayout(FlowLayout.RIGHT));
        panelBn.add(bnCreate);
        panelBn.add(bnsetBlue);
        panelBn.add(bnsetRed);
        panelBn.add(bnsetGreen);
        panelBn.add(bnClose);


        panelBn.setBackground(farbe.color);
        // hier fehlt Code: eine Registrierung

        this.getContentPane().add(panelBn, BorderLayout.NORTH);

        setFonts(getContentPane(), 18);

        bnCreate.addActionListener(this);
        bnsetBlue.addActionListener(this);
        bnsetRed.addActionListener(this);
        bnsetGreen.addActionListener(this);
        bnClose.addActionListener(this);
    } // setGUI

    private void setFonts(Container cont, int size) {
        for (int i = 0; i < cont.getComponentCount(); i++) {
            Component c = cont.getComponent(i);
            if (c instanceof JPanel) {
                setFonts((JPanel) c, size);
            } else {
                c.setFont(new Font("Arial", Font.BOLD, size));
            }
        }
    }

    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == bnCreate) {
            create_click();
        }
        if (e.getSource() == bnsetBlue) {
            setBlue_click();
        }
        if (e.getSource() == bnsetRed) {
            setRed_click();
        }
        if (e.getSource() == bnsetGreen) {
            setGreen_click();
        }

        if (e.getSource() == bnClose) {
            System.exit(0);
        }
    }

    private void create_click() {
        Tutorial09a frame = new Tutorial09a(farbe);
        frame.setVisible(true);
        frame.setLocation((int) (Math.random() * getWidth()), (int) (Math.random() * getHeight()));
    }

    private void setBlue_click() {
        farbe.color = Color.BLUE;
        getColor_click();
    }

    private void setRed_click() {
        farbe.color = Color.RED;
        getColor_click();
    }

    private void setGreen_click() {
        farbe.color = Color.GREEN;
        getColor_click();
    }

    private void getColor_click() {
        panelBn.setBackground(farbe.color);
    }

    public static void main(String[] args) {
        Farbe farbe2 = new Farbe();
        Tutorial09a frame = new Tutorial09a(farbe2);
        frame.setVisible(true);
        
    }
} // Tutorial09a

// hier fehlt Code: eine Ableitung
class Farbe {

    private static Farbe instance = new Farbe();

    public Farbe() {
        color = Color.BLUE;
    }

    public static Farbe getInstance() {
        return instance;
    }
    public Color color;
    // hier fehlt Code: eine Methode
}
4

1 に答える 1

4

javax.swing.Timerクラスを使用できます。

于 2013-05-13T10:49:56.207 に答える