Java 更改JFrame中的背景
我得到了鼠标在窗口上的坐标,我还使用KeyListner改变了背景颜色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;
- 黑色字母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
关键字(如sothis.setBackground(Color.BLACK))更改代码扩展的JFrame但是,您的JPanel看起来像顶部组件,因此这将是您想要的面板.setBackground(Color.BLACK)代码>只有标签的背景在变化,而不是整个窗口——我希望如此。考虑一下你的陈述。当您更改标签的背景时,为什么会认为框架的背景应该更改?拥有单个组件的意义在于,您可以更改单个组件的特性。如果更改其中一个组件的属性会影响所有其他组件,那么您如何编写应用程序?不要使用空布局。Swing设计用于布局管理器。此外,您不能直接设置框架的背景,因为框架被“内容窗格”覆盖。因此,要设置框架的背景,您确实需要执行以下操作:frame.getContentPane().setBackground(..)
,有关Swing设计的概述,请参阅上的Swing教程。