【求助】请会的高手帮忙看看
我想通过点击窗体菜单栏里的“变色”来改变窗体的背景颜色。。。设置了监听事件。。。编译通过了,可是运行起来点“变色”键还是没反应。。。。希望大家帮我看看错在哪~~~谢谢这是代码
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.io.*;
public class ct extends Frame implements ActionListener
{
static ct frm=new ct();
static MenuBar mb=new MenuBar();
static Menu menu0=new Menu("文件");
static Menu menu1=new Menu("编辑");
static Menu menu2=new Menu("查看");
static Menu menu3=new Menu("工具");
static Menu menu4=new Menu("帮助");
static MenuItem mi0_1=new Menu("新建");
static MenuItem mi0_2=new Menu("删除");
static MenuItem mi0_3=new Menu("重命名");
static MenuItem mi0_4=new Menu("属性");
static MenuItem mi0_5=new MenuItem("关闭");
static MenuItem mi1_1=new Menu("撤销");
static MenuItem mi1_2=new Menu("剪切");
static MenuItem mi1_3=new Menu("复制");
static MenuItem mi1_4=new Menu("粘贴");
static MenuItem mi1_5=new Menu("全选");
static MenuItem mi2_1=new Menu("变色");
static MenuItem mi3_1=new Menu("设置");
static MenuItem mi3_2=new Menu("选项");
static MenuItem mi4_1=new Menu("帮助主题");
static MenuItem mi4_2=new Menu("关于");
static Label lab=new Label("我的窗体",Label.CENTER);
static Button btn1=new Button("连 连 看");
static Button btn2=new Button("俄罗斯方块");
static Button btn3=new Button("猜 拳");
static Button btn4=new Button("猜 数");
public static void initGUI(){
frm.setTitle("管理员界面");
btn1.setBounds(400,100,100,30);
btn2.setBounds(550,100,100,30);
btn3.setBounds(700,100,100,30);
btn4.setBounds(850,100,100,30);
frm.add(btn1);
frm.add(btn2);
frm.add(btn3);
frm.add(btn4);
mb.add(menu0);
mb.add(menu1);
mb.add(menu2);
mb.add(menu3);
mb.add(menu4);
menu0.add(mi0_1);
menu0.add(mi0_2);
menu0.add(mi0_3);
menu0.add(mi0_4);
menu0.add(mi0_5);
menu1.add(mi1_1);
menu1.add(mi1_2);
menu1.add(mi1_3);
menu1.add(mi1_4);
menu1.add(mi1_5);
menu2.add(mi2_1);
menu3.add(mi3_1);
menu3.add(mi3_2);
menu4.add(mi4_1);
menu4.add(mi4_2);
mi0_5.addActionListener(frm);
mi1_1.addActionListener(frm);
mi1_2.addActionListener(frm);
mi1_3.addActionListener(frm);
mi1_4.addActionListener(frm);
mi1_5.addActionListener(frm);
mi2_1.addActionListener(frm);
mi3_1.addActionListener(frm);
mi3_2.addActionListener(frm);
mi4_1.addActionListener(frm);
mi4_2.addActionListener(frm);
frm.add(lab);
frm.setSize(1366,740);
frm.setBackground(Color.yellow);
frm.setMenuBar(mb);
frm.setVisible(true);
frm.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}}) ;
}
public static void main(String args[])
{
initGUI();
}
public void actionPerformed(ActionEvent e)
{
MenuItem mi=(MenuItem)e.getSource();
if(mi==mi0_5)
System.exit(0);
else if(mi==mi2_1)
frm.setBackground(Color.pink);//使窗体改变背景颜色
}
public void windowClosing(WindowEvent e)
{
frm.dispose();
System.exit(0);
}
}
----------------解决方案--------------------------------------------------------
这个问题是因为frame是一个重量级组件,在setVisible之前,设置其相关属性,并在setVisible(true)的时候根据所置属性显示其窗口,之后,再对其进行的操作将是无效的。
所以,解决办法有2个,一个是用swing组件,然后再frame.getContentPane().setBackground()里设置颜色。一个是awt组件中,添加一个Panel,然后再面板上添加组件,最后设置panel的颜色。
注意,一般来说,不要在frame上添加组件,最好在面板添加组件,然后再把面板添加到frame中。下面就你的程序修改如下:
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.io.*;
public class ct extends Frame implements ActionListener {
static ct frm = new ct();
static Panel panel = new Panel();
static MenuBar mb = new MenuBar();
static Menu menu0 = new Menu("文件");
static Menu menu1 = new Menu("编辑");
static Menu menu2 = new Menu("查看");
static Menu menu3 = new Menu("工具");
static Menu menu4 = new Menu("帮助");
static MenuItem mi0_1 = new Menu("新建");
static MenuItem mi0_2 = new Menu("删除");
static MenuItem mi0_3 = new Menu("重命名");
static MenuItem mi0_4 = new Menu("属性");
static MenuItem mi0_5 = new MenuItem("关闭");
static MenuItem mi1_1 = new Menu("撤销");
static MenuItem mi1_2 = new Menu("剪切");
static MenuItem mi1_3 = new Menu("复制");
static MenuItem mi1_4 = new Menu("粘贴");
static MenuItem mi1_5 = new Menu("全选");
static MenuItem mi2_1 = new MenuItem("变色");
static MenuItem mi3_1 = new Menu("设置");
static MenuItem mi3_2 = new Menu("选项");
static MenuItem mi4_1 = new Menu("帮助主题");
static MenuItem mi4_2 = new Menu("关于");
static Label lab = new Label("我的窗体", Label.CENTER);
static Button btn1 = new Button("连 连 看");
static Button btn2 = new Button("俄罗斯方块");
static Button btn3 = new Button("猜 拳");
static Button btn4 = new Button("猜 数");
public static void initGUI() {
frm.setTitle("管理员界面");
btn1.setBounds(400, 100, 100, 30);
btn2.setBounds(550, 100, 100, 30);
btn3.setBounds(700, 100, 100, 30);
btn4.setBounds(850, 100, 100, 30);
frm.add(btn1);
frm.add(btn2);
frm.add(btn3);
frm.add(btn4);
mb.add(menu0);
mb.add(menu1);
mb.add(menu2);
mb.add(menu3);
mb.add(menu4);
menu0.add(mi0_1);
menu0.add(mi0_2);
menu0.add(mi0_3);
menu0.add(mi0_4);
menu0.add(mi0_5);
menu1.add(mi1_1);
menu1.add(mi1_2);
menu1.add(mi1_3);
menu1.add(mi1_4);
menu1.add(mi1_5);
menu2.add(mi2_1);
menu3.add(mi3_1);
menu3.add(mi3_2);
menu4.add(mi4_1);
menu4.add(mi4_2);
mi0_5.addActionListener(frm);
mi1_1.addActionListener(frm);
mi1_2.addActionListener(frm);
mi1_3.addActionListener(frm);
mi1_4.addActionListener(frm);
mi1_5.addActionListener(frm);
mi2_1.addActionListener(frm);
mi3_1.addActionListener(frm);
mi3_2.addActionListener(frm);
mi4_1.addActionListener(frm);
mi4_2.addActionListener(frm);
panel.add(lab);
panel.setBackground(Color.yellow);
frm.add(panel);
frm.setSize(1366, 740);
// frm.setBackground(Color.yellow);
frm.setMenuBar(mb);
frm.setVisible(true);
frm.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
public static void main(String args[]) {
initGUI();
frm.setVisible(false);
frm.setBackground(Color.yellow);
frm.setVisible(true);
}
public void actionPerformed(ActionEvent e) {
MenuItem mi = (MenuItem) e.getSource();
if (mi == mi0_5)
System.exit(0);
else if (mi == mi2_1) {
panel.setBackground(Color.pink);// 使窗体改变背景颜色
}
}
public void windowClosing(WindowEvent e) {
frm.dispose();
System.exit(0);
}
}
----------------解决方案--------------------------------------------------------
回复 2楼 linjx0123
谢谢~~~ ----------------解决方案--------------------------------------------------------