Eman Almazrouei
Eman Almazrouei

Reputation: 3

jTextField and Jpanel color output

Create a program where you can enter a colour name into a textfield then use that colour to set the panel background colour with the colour specified in the text field Im having trouble getting the output

import javax.swing.*;

import java.awt.Color;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.SwingUtilities;

public class textfield implements  ActionListener{

    JTextField Input;
    JPanel color;
    JButton Button;

    public JPanel createContentPane (){

        // We create a bottom JPanel to place everything on.
        JPanel totalGUI = new JPanel();
        totalGUI.setLayout(null);

        // Creation of a Panel to contain the JLabels
        Input = new JTextField ("color", 35);
        Input.setBackground (Color.white);
        Input.setLocation(50,50);
        Input.setSize(100, 30);
        Input.addActionListener (this);
        totalGUI.add(Input);

        color = new JPanel();
        color.setBackground (Color.white);
        color.setLocation(200, 50);
        color.setSize(200, 100);
        totalGUI.add(color);


        totalGUI.setOpaque(true);
        return totalGUI;
    }

    public void actionPerformed(ActionEvent e) {

        String text = Input.getText();
        { if (text == "green")
            color.setBackground(color.green);
        }
    }

    private static void createAndShowGUI() {

        JFrame.setDefaultLookAndFeelDecorated(true);
        JFrame frame = new JFrame("Assignment");

        textfield demo = new textfield();
        frame.setContentPane(demo.createContentPane());

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(500, 300);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        //Schedule a job for the event-dispatching thread:
        //creating and showing this application's GUI.
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                createAndShowGUI();
            }
        });
    }
}

Upvotes: 0

Views: 1908

Answers (2)

Kunjan Thadani
Kunjan Thadani

Reputation: 1670

There are a few problems.

  1. You should compare equality of strings with equals method and not with ==.

  2. Change color.green to Color.GREEN

    public void actionPerformed(ActionEvent e) {
    
        String text = Input.getText();
        if (text.equals("green"))
        {
            color.setBackground(Color.GREEN);
        }
    }
    

For more than one color, you can use if-else or switch case

Using if-else:

   public void actionPerformed(ActionEvent e) {

        String text = Input.getText();
        if (text.equals("green"))
        {
            color.setBackground(Color.GREEN);
        }
        else if(text.equals("red"))
        {
            color.setBackground(Color.RED);
        }
        else if(text.equals("yellow"))
        {
            color.setBackground(Color.YELLOW);
        }
        else
        {
            color.setBackground(Color.BLUE);
        }

    }

Using switch case:

public void actionPerformed(ActionEvent e) {

    String text = Input.getText();

    switch (text) {
        case "green":
            color.setBackground(Color.GREEN);
            break;
        case "red":
            color.setBackground(Color.RED);
            break;
        case "yellow":
            color.setBackground(Color.YELLOW);
            break;
        case "blue":
            color.setBackground(Color.BLUE);
            break;

    }

}

Upvotes: 1

Orobo Lucky Ozoka
Orobo Lucky Ozoka

Reputation: 43

If you want more than one color then you should probably use an if-else statement:

 public void actionPerformed(ActionEvent evt){
             String text = input.getText();
             text=text.toUpperCase();
             if (text.equals("GREEN"))
                  color.setBackground(Color.GREEN);
             else if (text.equals("RED"))
                  color.setBackground(Color.RED);
             else if (......) //more checks
        }

And as a side note, always try to follow Java naming convention, variable names should start with lowercase for easy readability.

Upvotes: 0

Related Questions