当前位置: 代码迷 >> Java相关 >> 【求助】请会的高手帮忙看看
  详细解决方案

【求助】请会的高手帮忙看看

热度:248   发布时间:2010-06-22 02:57:42.0
【求助】请会的高手帮忙看看
我想通过点击窗体菜单栏里的“变色”来改变窗体的背景颜色。。。设置了监听事件。。。编译通过了,可是运行起来点“变色”键还是没反应。。。。希望大家帮我看看错在哪~~~谢谢

这是代码

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
谢谢~~~
----------------解决方案--------------------------------------------------------
  相关解决方案