当前位置: 首页 > 知识库问答 >
问题:

带有JFrame和JButtons的Java ActionListener

商和雅
2023-03-14
public class ColorButtons implements Runnable {

    public static void main(String args[]) {
        new ColorButtons().init();
    }


    public void init()  { 
 //Creating window

        JFrame frame = new JFrame();
        frame.setVisible (true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(1000,400);
        frame.setLayout(new FlowLayout(FlowLayout.CENTER,100,100));

//creating buttons

        JButton[] buttonz = {
            new JButton("Red"),
            new JButton("Yellow"),
            new JButton("Blue"),
            new JButton("Green")};

        //adding my buttons

        for (int i = 0; i < buttonz.length; i++) {
            frame.add(buttonz[i]);
            final int j = i;

            buttonz[i].addActionListener(new ActionListener() {

                @Override
                public void actionPerformed(ActionEvent e) {
                    switch (j) {
                        case 0:
                            frame.setBackground(Color.red);
                            break;
                        case 1:
                            frame.setBackground(Color.yellow);
                            break;
                        case 2:
                            frame.setBackground(Color.blue);
                            break;
                        default:
                            frame.setBackground(Color.green);
                            break;
                    }
                }
            });
        }
    }

    @Override
    public void run() {

    }

}

共有1个答案

屠兴旺
2023-03-14

您需要设置JFrame的contentPane的颜色,而不是JFrame本身,因为实际上包含JButtons的是contentPane。所以:

@Override
public void actionPerformed(ActionEvent e) {
    switch (j) {
    case 0:
        frame.getContentPane().setBackground(Color.red);
        break;
    case 1:
        frame.getContentPane().setBackground(Color.yellow);
        break;
    case 2:
        frame.getContentPane().setBackground(Color.blue);
        break;
    default:
        frame.getContentPane().setBackground(Color.green);
        break;
    }
}

考虑

  • 将所有内容放入自己的JPanel中并为JPanel着色
  • 让按钮的侦听器保持要将背景更改为的颜色,从而使其“更聪明”,例如:
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import javax.swing.*;

@SuppressWarnings("serial")
public class ColorButtons2 extends JPanel {

    public ColorButtons2() {
        int ebGap = 80;
        setBorder(BorderFactory.createEmptyBorder(ebGap, ebGap, ebGap, ebGap));
        setLayout(new GridLayout(1, 0, ebGap/2, 0));
        add(new JButton(new ColorAction("Red", Color.RED)));
        add(new JButton(new ColorAction("Yellow", Color.YELLOW)));
        add(new JButton(new ColorAction("Blue", Color.BLUE)));
        add(new JButton(new ColorAction("Green", Color.GREEN)));
    }

    private class ColorAction extends AbstractAction {
        private Color color;

        public ColorAction(String name, Color color) {
            super(name);
            this.color = color;
        }

        @Override
        public void actionPerformed(ActionEvent e) {
            setBackground(color);
        }
    }

    private static void createAndShowGui() {
        ColorButtons2 mainPanel = new ColorButtons2();

        JFrame frame = new JFrame("ColorButtons2");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().add(mainPanel);
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> createAndShowGui());
    }
}
 类似资料:
  • 我有一个JFrame,它被设置为大小为NxN的GridLayout。N由用户在程序开始时作为命令行给出。NxN模式中的JButton被添加到JPanels中的窗口中,由GridLayout(我认为)在位置中设置。 每个JButton是否需要自己的JPanel来使用GridLayout?我的印象是,您可以为所有按钮设置一个JPanel,并将JPanel设置为JButtons的GridLayout。我

  • 你好,我实际上正在尝试从jPanel切换到我的JFrame中的另一个jPanel。我已经更改了我的代码,下面是我遵循以下内容的样子:

  • 我有一个小键盘,由j按钮和一个jtext字段,有一个动作侦听器。当我按下按钮时,数字显示在文本字段中,但下一个数字会覆盖它。有人能告诉我如何将文本附加到长度13的数字上,以及何时返回回车。 如果我用键盘输入数字,我可以输入一串数字,但不能通过按钮输入。 我正在使用:

  • 问题内容: 我有一个带,还有四面八方面板(华北,华东,…)。面板中大部分是标签和按钮。 现在,我希望框架具有背景图像,一些研究告诉我,我必须更改框架的内容窗格。 但是,当我尝试此操作时,内容将置于背景中并且不可见。另外,如果调整了框架的尺寸,我也不知道如何调整图像的尺寸。 有一个简单的解决方法,还是我需要重新编写大部分代码? 问题答案: 将(或)与背景图片放到,然后将其填满整个区域,其余部分则放到

  • 我是GUI的初学者。 有没有一种快速的方法可以将同一个按钮/图像设置到GUI中的多个位置?为了更好地说明,如果我想在GUI中的不同位置使用这个JButton 10次,我需要创建一个新的JButton(new ImageIcon…)10次? 按钮不一定会导致任何事情,这只是为了展示。

  • 我试图获得一个带有自定义图标的JFrame,但没有任何效果。下面是我现在看到的Java 11: