Java 更改JFrame中的背景

Java 更改JFrame中的背景,java,swing,Java,Swing,我得到了鼠标在窗口上的坐标,我还使用KeyListner改变了背景颜色 黑色字母B W代表白色 G代表绿色 但是当我改变背景颜色时,只有标签的背景在改变,而不是整个窗口,我需要的是改变整个窗口,而不仅仅是标签,你知道为什么吗 import java.awt.*; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JLabel; import java.awt.event.KeyAdapter;

我得到了鼠标在窗口上的坐标,我还使用KeyListner改变了背景颜色

  • 黑色字母B
  • W代表白色
  • G代表绿色
但是当我改变背景颜色时,只有标签的背景在改变,而不是整个窗口,我需要的是改变整个窗口,而不仅仅是标签,你知道为什么吗

import java.awt.*;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JLabel;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
public class mouseCrd extends JFrame {
private JPanel contentPane;
public mouseCrd() {
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setBounds(100, 100, 650, 650);
    setTitle("Mouse co-ordinates");
    setVisible(true);
    setResizable(false);
    contentPane = new JPanel();
    setContentPane(contentPane);
    contentPane.setLayout(null);
    JPanel panel = new JPanel();
    panel.setBounds(0, 0, 650, 650);
    contentPane.add(panel);
    JLabel label = new JLabel(".................");
    label.setFont(new Font("Tahoma", Font.BOLD, 30));
    panel.add(label);
    panel.addMouseListener(new MouseAdapter() {
        public void mouseClicked(MouseEvent e){
            label.setText("X = "+ e.getX()+" ; Y = "+e.getY());
        }
    });
    addKeyListener(new KeyAdapter() {
        @Override
        public void keyReleased(KeyEvent e) {
            super.keyReleased(e);
            int clr = e.getKeyChar();
            if(clr==KeyEvent.VK_B)
            {
                System.out.println("B is pressed");
                label.setOpaque(true);
                label.setBackground(Color.BLACK);
                add(label);
            }
            else if(clr==KeyEvent.VK_W)
            {
                System.out.println("B is pressed");
                label.setOpaque(true);
                label.setBackground(Color.WHITE);
                add(label);
            }
            else if(clr==KeyEvent.VK_R)
            {
                System.out.println("B is pressed");
                label.setOpaque(true);
                label.setBackground(Color.RED);
                add(label);
            }
            else if(clr==KeyEvent.VK_O)
            {
                System.out.println("B is pressed");
                label.setOpaque(true);
                label.setBackground(Color.ORANGE);
                add(label);
            }
            else if(clr==KeyEvent.VK_G)
            {
                System.out.println("B is pressed");
                label.setOpaque(true);
                label.setBackground(Color.GREEN);
                add(label);
            }
        }
    });
}
    public static void main(String[] args){
                EventQueue.invokeLater(new Runnable()
                {
                    public void run() {
                        try {
                            mouseCrd frame = new mouseCrd();
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                    }
                });
            }
        }

如果要更改应用程序的背景,必须更改包含所有组件的JPAN的背景,您正在执行以下操作:
label.setBackground(橙色)
如果您想更改标签的背景,这在说明中是明确的,我在您的代码中做了一些更改,请看以下内容:

public class mouseCrd extends JFrame {
    public mouseCrd() {

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 650, 650);
        setTitle("Mouse co-ordinates");
        setVisible(true);
        setResizable(false);


        JPanel panel = new JPanel();
        panel.setBounds(0, 0, 650, 650);
        add(panel);

        JLabel label = new JLabel(".................");
        label.setFont(new Font("Tahoma", Font.BOLD, 30));

        panel.add(label);
        panel.addMouseListener(new MouseAdapter() {
            public void mouseClicked(MouseEvent e){
                label.setText("X = "+ e.getX()+" ; Y = "+e.getY());
            }
        });

        addKeyListener(new KeyAdapter() {
            @Override
            public void keyReleased(KeyEvent e) {
                super.keyReleased(e);
                char keyPressed = e.getKeyChar();
                if(keyPressed=='b')
                {
                    System.out.println("B is pressed");
                    panel.setBackground(Color.BLACK);
                }
                else if(keyPressed=='w')
                {
                    System.out.println("W is pressed");
                    panel.setBackground(Color.WHITE);
                }
                else if(keyPressed=='r')
                {
                    System.out.println("R is pressed");
                    panel.setBackground(Color.RED);
                }
                else if(keyPressed=='o')
                {
                    System.out.println("O is pressed");
                    panel.setBackground(Color.ORANGE);
                }
                else if(keyPressed=='g')
                {
                    System.out.println("G is pressed");
                    panel.setBackground(Color.GREEN);
                }
            }
        });
    }
    public static void main(String[] args){
       new mouseCrd();
    }
}

我删除了contentPane,因为它是无用的,然后在发布的密钥中,我只是用setBackground()方法更改了面板JPane的backgound,我删除了KeyEvent常量的使用,因为它更容易使用chars,我知道您已经得到了所需的答案,但我想向您推荐有关Swing和GUI的Oracle文档


其begginer友好,而不是使用
标签.setBackground(颜色.黑色)您需要以JPanel或JFrame背景为目标。使用
this
关键字(如so
this.setBackground(Color.BLACK))更改代码扩展的JFrame面板.setBackground(Color.BLACK)只有标签的背景在变化,而不是整个窗口——我希望如此。考虑一下你的陈述。当您更改标签的背景时,为什么会认为框架的背景应该更改?拥有单个组件的意义在于,您可以更改单个组件的特性。如果更改其中一个组件的属性会影响所有其他组件,那么您如何编写应用程序?不要使用空布局。Swing设计用于布局管理器。此外,您不能直接设置框架的背景,因为框架被“内容窗格”覆盖。因此,要设置框架的背景,您确实需要执行以下操作:
frame.getContentPane().setBackground(..)
,有关Swing设计的概述,请参阅上的Swing教程。