Создать окно с тремя кнопками, используя 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"); //имя заголовка
}
}