鱼C论坛

 找回密码
 立即注册
查看: 4162|回复: 6

[已解决]设置背景颜色不变色?为什么?

[复制链接]
发表于 2017-4-19 21:31:27 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
用eclipse写Java程序,设置了背景颜色,但不变色,求大神解答。新手上路,请多关照

代码如下:import java.awt.Color;
import java.awt.Dimension;
import java.awt.Frame;
import java.awt.Toolkit;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class homework {

        public static void main(String[] args) {
                homework1 A = new homework1();
                A.print_homework1();

        }

}

class homework1 extends Frame {
        String F1;

        JTextField A1 = new JTextField(8);
        JTextField A2 = new JTextField(8);
        JTextField A3 = new JTextField(8);

        JLabel B1 = new JLabel("+");

        JButton C1 = new JButton("=");

        JPanel D1 = new JPanel();

        /**
         *
         */
        private static final long serialVersionUID = 1L;

        public void print_homework1() {
                setTitle("实现两数之和");
                setSize(number.frame_width, number.frame_heigh);
                setResizable(false);
                setVisible(true);
                setBackground(Color.BLUE);// 设置背景颜色
                // 用于窗口的定位
                Toolkit B = getToolkit();// 工具包,抽象的类用特殊方法getToolkit()得到一个对象
                Dimension C = B.getScreenSize();// Dimension
                                                                                // 类封装单个对象中组件的宽度和高度(精确到整数)。此处为得到屏幕的宽和高并放在C中
                int width = C.width;
                int heigh = C.height;
                setLocation((width - number.locate_width) / 2,
                                (heigh - number.locate_heigh) / 2);// 定位在屏幕的中间位置
                // 窗口关闭,这是个事件
                addWindowListener(new WindowAdapter() {
                        public void windowClosing(WindowEvent e) {
                                System.exit(0);
                        }
                });

                add(D1);
                D1.add(A1);
                D1.add(B1);
                D1.add(A2);
                D1.add(C1);
                D1.add(A3);

                C1.addMouseListener(new MouseAdapter() {

                        @Override
                        public void mouseClicked(MouseEvent e) {
                               
                                int n1 = Integer.parseInt(A1.getText());//此语句相当于类型转换,将字符串转换为整型
                                int n2= Integer.parseInt(A2.getText());//此语句相当于类型转换,将字符串转换为整型
                                A3.setText(""+(n1+n2));//此语句相当于类型转换,将整型转换为字符串

                        }
                });

        }

}

class number {
        final static int frame_width = 400;
        final static int frame_heigh = 100;
        final static int locate_width = 400;
        final static int locate_heigh = 200;
}

截图如下:C:\Users\23203\Pictures

求大神解答
最佳答案
2017-4-20 12:07:03
在这里我更正下我上面的说法,我把 JPanel 组件以及往 JPanel 面板添加的其它组件代码注释掉,如下:

0.png

说明 setBackground() 这个方法对 Frame 是有效的,另外这个方法对 JFrame 设置背景颜色无效

你第二次给的代码我将两句 add() 注释掉,如下:

1.png

说明 setBackground() 这个方法有效,上面那个回答我理解错了,我改为 D1.setBackground() 是改了

JPanel 面板的颜色,至于没改变颜色,是因为 JPanel 面板覆盖掉了之前的,所以才没显示。而不是因为由于

JFrame 里的 getContentPane() 的原因导致的,因为你给的两段代码都是继承了 Frame 类,而不是 JFrame 类
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-4-19 21:35:11 | 显示全部楼层
C:\Users\23203\Pictures\不变色.gif
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-19 21:35:52 | 显示全部楼层
啊,怎么不能发图呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-20 10:40:09 | 显示全部楼层
本帖最后由 零度非安全 于 2017-4-20 10:47 编辑

原因:

JFrame 或者 Frame 的 setBackground(Color color) 方法设置后显示出来的颜色,你看到的不是直接的 JFrame 或

者 Frame,而是 JFrame.getContentPane() 而 JFrame 上的 contentPane 默认是 Color.WHITE 的,所以,无论

你对 JFrame 或者 Frame 怎么设置背景颜色,你看到的都只是 contentPane。

改进:

我将你的代码改变如下,你为 JFrame 添加一个 JPanel 组件 D1,那我就对这个 D1 作下改动,如下:

只需将 setBackground(Color.BLUE) 改为 D1.setBackground(Color.BLUE) 就行了

0.png

利用 JPanel 组件的颜色覆盖了 JFrame.getContentPane()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-20 11:02:11 | 显示全部楼层
零度非安全 发表于 2017-4-20 10:40
原因:

JFrame 或者 Frame 的 setBackground(Color color) 方法设置后显示出来的颜色,你看到的不是直接 ...



大神,为什么这个可以变色呢?这个也没有添加Panel的。
新手上路,多多关照

代码如下:

package Test2;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Frame;
import java.awt.Toolkit;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.JButton;

public class demo1 {

        public static void main(String[] args) {
                demo2 A = new demo2();
                A.Demo();

        }

}

class demo2 extends Frame {

        /**
         *
         */
        private static final long serialVersionUID = 1L;

        JButton A1 = new JButton("按钮1");
        JButton A2 = new JButton("按钮2");

        public void Demo() {
                setTitle("本窗体使用绝对布局");
                setSize(number.frame_width, number.frame_heigh);
                setResizable(true);
                setVisible(true);
                setBackground(Color.CYAN);// 设置背景颜色
                // 用于窗口的定位
                Toolkit B = getToolkit();// 工具包,抽象的类用特殊方法getToolkit()得到一个对象
                Dimension C = B.getScreenSize();// Dimension
                                                                                // 类封装单个对象中组件的宽度和高度(精确到整数)。此处为得到屏幕的宽和高并放在C中
                int width = C.width;
                int heigh = C.height;
                setLocation((width - number.locate_width) / 2,
                                (heigh - number.locate_heigh) / 2);// 定位在屏幕的中间位置
                // 窗口关闭,这是个事件
                addWindowListener(new WindowAdapter() {
                        public void windowClosing(WindowEvent e) {
                                System.exit(0);
                        }
                });

                setLayout(null);// 布局管理为空布局,自己设置组件的位置大小。也称为绝对布局。
                A1.setBounds(100, 100, 100, 50);// 设置按钮1的位置及其大小,前两个数代表组件左上角的坐标,后两个数代表组件的宽和高
                A2.setBounds(200, 200, 100, 50);
               
                add(A1);
                add(A2);

        }
}

class number {
        final static int frame_width = 400;
        final static int frame_heigh = 400;
        final static int locate_width = 400;
        final static int locate_heigh = 200;
}
//绝对布局:组件的位置大小不随窗口的改变而改变
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-20 12:07:03 | 显示全部楼层    本楼为最佳答案   
在这里我更正下我上面的说法,我把 JPanel 组件以及往 JPanel 面板添加的其它组件代码注释掉,如下:

0.png

说明 setBackground() 这个方法对 Frame 是有效的,另外这个方法对 JFrame 设置背景颜色无效

你第二次给的代码我将两句 add() 注释掉,如下:

1.png

说明 setBackground() 这个方法有效,上面那个回答我理解错了,我改为 D1.setBackground() 是改了

JPanel 面板的颜色,至于没改变颜色,是因为 JPanel 面板覆盖掉了之前的,所以才没显示。而不是因为由于

JFrame 里的 getContentPane() 的原因导致的,因为你给的两段代码都是继承了 Frame 类,而不是 JFrame 类
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2017-4-20 17:02:45 | 显示全部楼层
零度非安全 发表于 2017-4-20 12:07
在这里我更正下我上面的说法,我把 JPanel 组件以及往 JPanel 面板添加的其它组件代码注释掉,如下:

万分感谢 大神!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-24 04:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表