设置背景颜色不变色?为什么?
用eclipse写Java程序,设置了背景颜色,但不变色,求大神解答。新手上路,请多关照{:5_91:}代码如下: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
求大神解答{:5_92:} C:\Users\23203\Pictures\不变色.gif 啊,怎么不能发图呀{:5_94:} 本帖最后由 零度非安全 于 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) 就行了
利用 JPanel 组件的颜色覆盖了 JFrame.getContentPane() 零度非安全 发表于 2017-4-20 10:40
原因:
JFrame 或者 Frame 的 setBackground(Color color) 方法设置后显示出来的颜色,你看到的不是直接 ...
大神,为什么这个可以变色呢?这个也没有添加Panel的。
新手上路,多多关照{:5_94:}
代码如下:
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;
}
//绝对布局:组件的位置大小不随窗口的改变而改变
在这里我更正下我上面的说法,我把 JPanel 组件以及往 JPanel 面板添加的其它组件代码注释掉,如下:
说明 setBackground() 这个方法对 Frame 是有效的,另外这个方法对 JFrame 设置背景颜色无效
你第二次给的代码我将两句 add() 注释掉,如下:
说明 setBackground() 这个方法有效,上面那个回答我理解错了,我改为 D1.setBackground() 是改了
JPanel 面板的颜色,至于没改变颜色,是因为 JPanel 面板覆盖掉了之前的,所以才没显示。而不是因为由于
JFrame 里的 getContentPane() 的原因导致的,因为你给的两段代码都是继承了 Frame 类,而不是 JFrame 类 零度非安全 发表于 2017-4-20 12:07
在这里我更正下我上面的说法,我把 JPanel 组件以及往 JPanel 面板添加的其它组件代码注释掉,如下:
万分感谢 大神!{:7_113:}
页:
[1]