Создать окно с тремя кнопками, используя Swing - Java

Узнай цену своей работы

Формулировка задачи:

Добрый день! Помогите, пожалуйста, решить задачу. Создать окно с тремя кнопками. Каждая кнопка должна окрашивать поверхность окна в один из трех цветов: красный, зеленый, синий. Использовать Swing и не использовать апплеты. Перед этим я решал точно такую же задачу, используя апплеты. Решил успешно. На всякий случай выкладываю код.
package myhello;
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
 
public class MyFrame extends Applet implements ActionListener {
 
    int symbol;
    Button but[];
 
    public void init() {
        but = new Button[5];
 
        Panel pn = new Panel(new GridLayout(3, 1));
 
        but[3] = new Button("Red");
        but[3].addActionListener(this);
        pn.add(but[3]);
 
        but[1] = new Button("Green");
        but[1].addActionListener(this);
        pn.add(but[1]);
 
        but[2] = new Button("Blue");
        but[2].addActionListener(this);
        pn.add(but[2]);
     
        add(pn);
    }
 
    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == but[3]) symbol = 3;
        if (e.getSource() == but[0]) symbol = 0;
        if (e.getSource() == but[1]) symbol = 1;
        if (e.getSource() == but[2]) symbol = 2;
        repaint();
    }
 
    public void update(Graphics g) {
        paint(g);
        }
 
    @Override
    public void paint(Graphics g) {
        g.clearRect(0, 0, getWidth(), getHeight());
        switch (symbol) {
            case 0:
                white(g);
                break;
            case 3:
                red(g);
                break;
            case 1:
                green(g);
                break;
            case 2:
                blue(g);
                break;
        }
    }
    
    public void white(Graphics g) {
        g.setColor(Color.WHITE);
        g.fillRect(0, 0, getWidth(), getHeight());
    }
    
    public void red(Graphics g) {
        g.setColor(Color.RED);
        g.fillRect(0, 0, getWidth(), getHeight());
    }
 
    public void green(Graphics g) {
        g.setColor(Color.GREEN);
        g.fillRect(0, 0, getWidth(), getHeight());
    }
 
    public void blue(Graphics g) {
        g.setColor(Color.BLUE);
        g.fillRect(0, 0, getWidth(), getHeight());
    }
}
Но теперь нам задали задачу сделать то же самое не используя апплеты. У меня получается вот такой код, но он не работает. Программа выдает пустое окно.
package myhello;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
 
public class MyFrame extends JFrame implements ActionListener {
 
    int symbol;
    JButton but[];
 
    public void init() {
        but = new JButton[5];
 
        JPanel panel = new JPanel();
        panel.setLayout(new FlowLayout());
        
        but[3] = new JButton("Red");
        but[3].addActionListener(this);
        but[3].setBounds(50, 50, 50, 20);
 
        but[1] = new JButton("Green");
        but[1].addActionListener(this);
        but[1].setBounds(130, 50, 50, 20);
 
        but[2] = new JButton("Blue");
        but[2].addActionListener(this);
        but[2].setBounds(210, 50, 50, 20);
    }
 
    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == but[3]) symbol = 3; // вывести надо три цвета, но задано четыре - для того, чтобы изначально при запуске окна выводился белый, а не какой-то другой 
        if (e.getSource() == but[0]) symbol = 0;
        if (e.getSource() == but[1]) symbol = 1;
        if (e.getSource() == but[2]) symbol = 2;
        repaint();
    }
 
    public void update(Graphics g) {
        paint(g);
        }
 
    @Override
    public void paint(Graphics g) {
        g.clearRect(0, 0, getWidth(), getHeight());
        switch (symbol) {
            case 0:
                white(g); // вывести надо три цвета, но задано четыре - для того, чтобы изначально при запуске окна выводился белый, а не какой-то другой
                break;
            case 3:
                red(g);
                break;
            case 1:
                green(g);
                break;
            case 2:
                blue(g);
                break;
        }
    }
    
    public void white(Graphics g) {
        g.setColor(Color.WHITE); // вывести надо три цвета, но задано четыре - для того, чтобы изначально при запуске окна выводился белый, а не какой-то другой
        g.fillRect(0, 0, getWidth(), getHeight());
    }
    
    public void red(Graphics g) {
        g.setColor(Color.RED);
        g.fillRect(0, 0, getWidth(), getHeight());
    }
 
    public void green(Graphics g) {
        g.setColor(Color.GREEN);
        g.fillRect(0, 0, getWidth(), getHeight());
    }
 
    public void blue(Graphics g) {
        g.setColor(Color.BLUE);
        g.fillRect(0, 0, getWidth(), getHeight());
    };

public static void main(String[] args) {
    // Создаем объект окна
    JFrame frame = new JFrame("Colors"); //имя заголовка
    // Устанавливаем первоначальный размер окна
    frame.setSize(400, 400);
    // Делаем окно видимым
    frame.setVisible(true);
    }
}
Помогите, пожалуйста, с решением задачи! Заранее благодарю!

Решение задачи: «Создать окно с тремя кнопками, используя Swing»

textual
Листинг программы
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
 
public class MyFrame extends JFrame implements ActionListener {
 
    private final JPanel panel = new JPanel();
 
    public MyFrame(String title) {
        super(title);
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        add(panel);
 
        JButton b = new JButton("Red");
        b.addActionListener(this);
        b.setBounds(50, 50, 50, 20);
        panel.add(b);
 
        b = new JButton("Green");
        b.addActionListener(this);
        b.setBounds(130, 50, 50, 20);
        panel.add(b);
 
        b = new JButton("Blue");
        b.addActionListener(this);
        b.setBounds(210, 50, 50, 20);
        panel.add(b);
 
        // Устанавливаем первоначальный размер окна
        setSize(400, 400);
        // Делаем окно видимым
        setVisible(true);
 
    }
 
    public void actionPerformed(ActionEvent e) {
        String tag = ((JButton) e.getSource()).getText();
        switch (tag) {
            case "Red":
                panel.setBackground(Color.RED);
                break;
            case "Green":
                panel.setBackground(Color.GREEN);
                break;
            case "Blue":
                panel.setBackground(Color.BLUE);
                break;
        }
    }
 
    public static void main(String[] args) {
        new MyFrame("Colors"); //имя заголовка
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4.364 из 5