1

以下にコードを投稿しましたが、本質的に少し問題があります。赤、緑、青の 3 つのテキストを入力するプログラムを作成しようとしています。アイデアは、テキストが赤で始まり、色の変更ボタンが押されたときです。入力された RGB 値が取得され、値に基づいて色が変更されます。ただし、テキストフィールドに入力された値をプログラムが取得して色を変更するのに問題があります。どんな助けでも大歓迎です。

また、コードで手動で編集したときに、テキストと色の値の両方をハンドラーで一緒に変更することに問題がありました。色を変更するか、テキストを変更するだけです。

どんな助けでも大歓迎です。:D

package RGBProgram;

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class RGB extends JApplet {
    Color col = new Color(255, 0, 0);
    String str = "Hello";
    JButton butReset, butChange;
    JTextField textR, textG, textB;

    public void init(){
        butReset = new JButton("Reset");
        butChange = new JButton("Change Colour");
        textR = new JTextField("Red", 10);
        textG = new JTextField("Green", 10);
        textB = new JTextField("Blue", 10);

        RGBPanel panel = new RGBPanel(this);
        JPanel butPanel = new JPanel();
        JPanel textPanel = new JPanel();
        butPanel.add(butReset);
        butPanel.add(butChange);
        textPanel.add(textR);
        textPanel.add(textG);
        textPanel.add(textB);
        add(panel, BorderLayout.CENTER);
        add(butReset, BorderLayout.NORTH);
        add(butChange, BorderLayout.SOUTH);
        add(textPanel, BorderLayout.WEST);

        Handler reset = new Handler(this);
        Handler change = new Handler(this);

        textR.addActionListener (new Handler(this));
        textG.addActionListener (new Handler(this));
        textB.addActionListener (new Handler(this));
        butReset.addActionListener(reset);
        butChange.addActionListener(change);

    }

    class RGBPanel extends JPanel{
        RGB theApplet;

            RGBPanel(RGB app){
                theApplet = app;
            }

        public void paintComponent(Graphics g)
        {super.paintComponent(g);
        Color cols = col;
        String str1 = str;
        g.setColor(cols);
        g.drawString(str1, 0, 150);
        }
    }
}

package RGBProgram;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Handler implements ActionListener {
     RGB theApplet;
    Handler(RGB app){
        theApplet = app;
    }

    public void actionPerformed(ActionEvent e){
        String red = theApplet.textR.getText();
        String green = theApplet.textG.getText();
        String blue = theApplet.textB.getText();
        theApplet.textR.setText("");
        theApplet.textG.setText("");
        theApplet.textB.setText("");

        try{
            int r = Integer.parseInt(red.trim());
            int g = Integer.parseInt(green.trim());
            int b = Integer.parseInt(blue.trim());

        }
        catch (NumberFormatException ex){

        }

        if (e.getSource() == theApplet.butChange)
            theApplet.str = "Goodbye";
            theApplet.col = new Color(r, g, b);
        if (e.getSource() == theApplet.butReset)
            theApplet.str = "Hello";
            theApplet.col = new Color(255, 0, 0);
    theApplet.repaint();
    }

}
4

1 に答える 1

1

actionPerformedクラスのメソッドを次のように変更したところHandler、色が正しく適用されるようになりました。

public void actionPerformed(ActionEvent e) {
    String red = theApplet.textR.getText();
    String green = theApplet.textG.getText();
    String blue = theApplet.textB.getText();
    theApplet.textR.setText("");
    theApplet.textG.setText("");
    theApplet.textB.setText("");

    try {
        int r = Integer.parseInt(red.trim());
        int g = Integer.parseInt(green.trim());
        int b = Integer.parseInt(blue.trim());
        if (e.getSource() == theApplet.butChange)
            theApplet.str = "Goodbye";
        theApplet.col = new Color(r, g, b);
        if (e.getSource() == theApplet.butReset)
            theApplet.str = "Hello";
        theApplet.repaint();
    } catch (NumberFormatException ex) {
        ex.printStackTrace();
    }
}
于 2012-10-27T15:24:05.930 に答える