Изменение цвета фона панели 3 разными способами

1

Я хочу показать программу, что 3 кнопки внизу, если мы нажмем красную кнопку, цвет изменения панели станет красным и т.д.

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

public class LatihanEvent2 implements ActionListener {

private JButton buttonRed = new JButton ("Red");
private JButton buttonGreen = new JButton ("Green");
private JButton buttonBlue = new JButton ("Blue");

public LatihanEvent2() {
    JFrame frame = new JFrame("Contoh Event");
    frame.setSize(400,400);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

JPanel panel = new JPanel();

panel.add(buttonRed, BorderLayout.WEST);
panel.add(buttonGreen, BorderLayout.CENTER);
panel.add(buttonBlue, BorderLayout.EAST);

//Inner Class
ListenerRed clickListener = new ListenerRed();
buttonRed.addActionListener(clickListener);

//Anonymous Class
buttonGreen.addActionListener(new ActionListener () {
    public void actionPerformed (ActionEvent e) {
        buttonGreen.setBackground(Color.GREEN);
    }
});

//Derived Class
buttonBlue.addActionListener(this); //Step 2

frame.add(panel, BorderLayout.SOUTH);
frame.setVisible(true);
frame.show();
}

public static void main (String[] args) {
    new LatihanEvent2();
}

//Inner Class
class ListenerRed implements ActionListener {
    public void actionPerformed (ActionEvent e) {
        buttonRed.setBackground(Color.RED);
    }
}

//Derived Class
public void actionPerformed (ActionEvent e) {
    buttonBlue.setBackground(Color.BLUE);
}
}

В моем кодировании было 3 метода. Внутренний класс, Анонимный класс и Производный класс. Как заставить панель менять цвет фона с помощью этого другого метода? Помоги мне, пожалуйста

  • 1
    Постановка задачи подразумевает изменение цвета панели, но действия в слушателях устанавливают цвет BG кнопки, к которой они прикреплены. Это намеренно? Также обратите внимание, что если требуется изменить цвет панели, подразумевается, что необходимо сделать часть этой панели видимой для пользователя. Самый простой способ сделать это - добавить EmptyBorder .
  • 0
    @AndrewThompson AndrewThompson, как добавить EmptyBorder пожалуйста? ._.
Показать ещё 6 комментариев
Теги:
swing

3 ответа

1
Лучший ответ

В этом примере добавляется вторая панель (ui), к которой каждое действие устанавливает фон. См. Комментарии в коде для дальнейших советов.

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

public class LatihanEvent2 implements ActionListener {

    private JButton buttonRed = new JButton("Red");
    private JButton buttonGreen = new JButton("Green");
    private JButton buttonBlue = new JButton("Blue");
    JPanel ui = new JPanel(new BorderLayout(5, 5));

    public LatihanEvent2() {
        JFrame frame = new JFrame("Contoh Event");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        // quick and dirty way to provide space in a GUI
        ui.add(new JLabel(new ImageIcon(
                new BufferedImage(300, 300, BufferedImage.TYPE_INT_ARGB))));

        JPanel panel = new JPanel();
        // border layout constraints are irrelevant to a flow layout!
        //ui.add(buttonRed, BorderLayout.WEST);
        panel.add(buttonRed);
        panel.add(buttonGreen);
        panel.add(buttonBlue);

        //Inner Class
        ListenerRed clickListener = new ListenerRed();
        buttonRed.addActionListener(clickListener);

        //Anonymous Class
        buttonGreen.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                ui.setBackground(Color.GREEN);
            }
        });

        //Derived Class
        buttonBlue.addActionListener(this); //Step 2

        ui.add(panel, BorderLayout.PAGE_END);

        frame.setContentPane(ui);

        frame.pack();
        //frame.show();  // Deprecated!
        frame.setVisible(true); // should be last..
    }

    public static void main(String[] args) {
        // The GUI should be created and updated on the EDT.  E.G.
        Runnable r = new Runnable() {

            @Override
            public void run() {
                new LatihanEvent2();
            }
        };
        // Here is the iomportant part of actually 
        // starting that runnable on the EDT..
        SwingUtilities.invokeLater(r);
    }

    //Inner Class
    class ListenerRed implements ActionListener {

        public void actionPerformed(ActionEvent e) {
            ui.setBackground(Color.RED);
        }
    }

    //Derived Class
    public void actionPerformed(ActionEvent e) {
        ui.setBackground(Color.BLUE);
    }
}
  • 0
    ах! это то, что я имею в виду. В вашем коде используется новый материал (bufferedImage), поэтому я все еще растерялся, но я его выучу ^^ Большое спасибо. извините, что вы запутались хе-хе
  • 0
    «В вашем коде используется новый материал (bufferedImage)». Закомментируйте добавленную строку и посмотрите, что произойдет. ;)
Показать ещё 1 комментарий
1
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class LatihanEvent2 implements ActionListener {

    private JButton buttonRed = new JButton("Red");
    private JButton buttonGreen = new JButton("Green");
    private JButton buttonBlue = new JButton("Blue");
    JPanel panel = new JPanel();

    public LatihanEvent2() {
        JFrame frame = new JFrame("Contoh Event");

        panel.add(buttonRed, BorderLayout.WEST);
        panel.add(buttonGreen, BorderLayout.CENTER);
        panel.add(buttonBlue, BorderLayout.EAST);

        frame.add(panel, BorderLayout.SOUTH);
        frame.setSize(400, 400);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);

        buttonRed.addActionListener(this);
        buttonGreen.addActionListener(this);
        buttonBlue.addActionListener(this);
    }

    public void actionPerformed(ActionEvent e) {
        String btnName = e.getActionCommand();
        if(btnName.equalsIgnoreCase("red")) {
            panel.setBackground(Color.red);
        }
        else if(btnName.equalsIgnoreCase("green")) {
            panel.setBackground(Color.green);
        }
        else {
            panel.setBackground(Color.blue);
        }
    }

    public static void main(String[] args) {
        new LatihanEvent2();
    }
}
  • 0
    Да, это показывает изменения в панели, как я ожидаю, это требование здесь.
  • 0
    извините, но я имею в виду использование 3 методов, ваш только 1 метод хе-хе ._.
Показать ещё 2 комментария
0

Более простым способом мы можем сделать это как: (после просмотра ваших требований)

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

public class LatihanEvent2 implements ActionListener {

    private JButton buttonRed = new JButton("Red");
    private JButton buttonGreen = new JButton("Green");
    private JButton buttonBlue = new JButton("Blue");
    JFrame frame = new JFrame("Contoh Event");
    JPanel panelDown = new JPanel();
    JPanel panelUp = new JPanel();

    public LatihanEvent2() {

        panelDown.add(buttonRed, BorderLayout.WEST);
        panelDown.add(buttonGreen, BorderLayout.CENTER);
        panelDown.add(buttonBlue, BorderLayout.EAST);

        frame.add(panelDown, BorderLayout.SOUTH);
        frame.add(panelUp, BorderLayout.CENTER);
        frame.setSize(400, 400);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);

        buttonRed.addActionListener(this);
        buttonGreen.addActionListener(this);
        buttonBlue.addActionListener(this);
    }

    public void actionPerformed(ActionEvent e) {
        String btnName = e.getActionCommand();
        if(btnName.equalsIgnoreCase("red")) {
            panelUp.setBackground(Color.red);
        }
        else if(btnName.equalsIgnoreCase("green")) {
            panelUp.setBackground(Color.green);
        }
        else {
            panelUp.setBackground(Color.blue);
        }
    }

    public static void main(String[] args) {
        new LatihanEvent2();
    }
}
  • 0
    это кодирование как bhaskar, верно? Просто используйте 1 метод, хе-хе> <мой учитель смущает, что мы должны использовать 3 метода.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню