嘎嘎猫! 2021-12-05 14:54 采纳率: 62.5%
浏览 25

下面是一个时钟程序和一个字体Font程序,如何才能实现将二者结合,可以给钟表改字体调颜色

第二次发了,我也曾试着努力去做出来,但是总有许多坎坷挡在面前却没有人能够指引我前进

只希望大家能帮我做出合适的代码

思路: 设置字体程序中,新增一个文本域,将时钟显示放在文本域中,监听字体事件,动态去修改时钟字体颜色。

问题相关代码

颜色程序代码
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
 
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JColorChooser;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
 
public class ToolkitDemo extends JFrame implements ItemListener,ActionListener{
 
    JLabel lblTitle;
    //多选框
    JCheckBox cbBold,cbItalic;
    //下拉列表框
    JComboBox<Integer> fontSize;
    //下拉列表框
    JComboBox<String> fontName;
    //选择颜色
    JButton btnColor;
    
    //保存粗体,斜体,字号的值
    int bold=Font.PLAIN;
    int italic = Font.PLAIN;
    int size = 20;
    String fontList[] ;
    String fontFace = "";
    public ToolkitDemo() {
        //调用父类的构造函数,设置窗口标题
        super("Toolkit工具类的使用");
        //设置窗口标题
//        setTitle("Toolkit工具类的使用");
        //获取toolkit实例
        Toolkit toolkit = Toolkit.getDefaultToolkit();
        //加载图片,参数是图片文件的路径
        Image image = toolkit.getImage("src\\pig.jpg");
//        Image image = toolkit.getImage("src\\pig.jpg");
        //把image设置到窗口图标
        this.setIconImage(image);
        //获取屏幕大小(显示器的分辨率)
        //获取屏幕宽度
        int width = toolkit.getScreenSize().width;
        //获取屏幕高度
        int height = toolkit.getScreenSize().height;
        System.out.println("屏幕宽度:"+width+",高度:" + height);
        
        //获取系统支持在字体列表
        fontList = toolkit.getFontList();
        for(String fontName : fontList) {
            System.out.println("字体名称:"+fontName);
        }
        fontName  = new JComboBox<String>(fontList);
        fontName.addItemListener(this);
        fontFace = fontList[0];
        lblTitle = new JLabel("展示Font设置属性哈哈哈",JLabel.CENTER);
        //设置字体颜色
        lblTitle.setForeground(Color.RED);
        Font font = new Font("宋体",Font.PLAIN,size);
        //设置JLabel的字体
        lblTitle.setFont(font);
        cbBold = new JCheckBox("粗体");
        cbItalic = new JCheckBox("斜体");
        
        Integer size[] = {10,12,14,18,20,28,38,48,58,72};
        //创建字体列表
        fontSize = new JComboBox<Integer>(size);
        
        //设置选中的默认值为20
        fontSize.setSelectedIndex(4);
        
        btnColor = new JButton("选择颜色");
        btnColor.addActionListener(this);
        //设置Panel的布局为流布局
        JPanel northPanel = new JPanel(new FlowLayout());
        //把组件放在面板中
        northPanel.add(fontName);
        northPanel.add(cbBold);
        northPanel.add(cbItalic);
        northPanel.add(fontSize);
        northPanel.add(btnColor);
        //把组件添加到窗口
        //没有设置位置,默认就是中间BorderLayout.CENTER
        add(lblTitle);
        add(northPanel,BorderLayout.NORTH);
        //注册监听
        cbBold.addItemListener(this);
        cbItalic.addItemListener(this);
        fontSize.addItemListener(this);
        //再把面板放在窗口中的北部区域
        setSize(500,400);
        setVisible(true);
//        show(); //显示窗口,该函数不推荐使用
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        //窗口居中
//        setLocationRelativeTo(null);
        //设置窗口位置
        setLocation((width-500)/2, (height-400)/2);
    }
    //item事件,点击多选框,下拉列表框时,会触发该事件
    @Override
    public void itemStateChanged(ItemEvent e) {
        if(e.getSource() == cbBold) {
            //选中返回1,反之为2
            int state = e.getStateChange();
            if(state == 1) {
                bold = Font.BOLD; //选中粗体
            }else {
                bold = Font.PLAIN;
            }
        }else if(e.getSource()==cbItalic) {
            int state = e.getStateChange();
            if(state == 1) {
                italic = Font.ITALIC; //选中斜体
            }else {
                italic = Font.PLAIN;
            }
        }else if(e.getSource() == fontSize) {
            //字号,把返回的Object类型的字号强制转换为整形
            size = (Integer)fontSize.getSelectedItem();
        }else if(e.getSource() == fontName) {
            fontFace = fontList[fontName.getSelectedIndex()];
        }
        //创建新的字体,然后设置到lblTitle组件中,改变字体
        Font font = new Font(fontFace,bold + italic, size);
        lblTitle.setFont(font);
    }
    
    public static void main(String[] args) {
        new ToolkitDemo();
    }
    @Override
    public void actionPerformed(ActionEvent e) {
        JColorChooser colordlg = new JColorChooser();
        //打开颜色对话框,并且获取选中的颜色
        Color color=colordlg.showDialog(this, "请选择字体颜色", Color.BLACK);
        //设置发送文本框的字体颜色
        lblTitle.setForeground(color);
        
    }
}

钟表程序代码

import java.awt.Font;
import java.util.Calendar;
import java.util.GregorianCalendar;
 
import javax.swing.*;
 
public class Clock extends JFrame implements Runnable{
    JLabel l;
    public Clock() {
        //设置窗体外包装
        JFrame frame = new JFrame();
        
        
        this.setTitle("这是一个超级炫酷的大时钟");
        this.setLocation(300, 200);
        this.setSize(350, 250);
        l = new JLabel();
        
        l.setFont(new Font("楷体", 80, 80));
        l.setSize(200, 150);
        l.setText(getTime());
        add(l);
        this.setVisible(true);
        
        
    }
    //设置窗体内部
    public static String getTime() {
        GregorianCalendar g = new GregorianCalendar();
        int hour = g.get(Calendar.HOUR_OF_DAY);
        int min = g.get(Calendar.MINUTE);
        int second = g.get(Calendar.SECOND);
        return format(hour) + ":" + format(min) + ":" + format(second);
    }
    
    //写format方法
    public static String format(int a) {
        return a < 10 ? "0" + a :"" + a;
    }
    
    @Override
    public void run() {
        // TODO Auto-generated method stub
        while(true) {
            try {
                Thread.sleep(10);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }l.setText(getTime());
        }
    }
    public static void main(String[] args) {
        
        Thread t = new Thread(new Clock());
        t.start();
        
    }
    
}

下面是每个程序的运行照片

img

img

  • 写回答

1条回答 默认 最新

  • 关注

    根据选择的颜色,改变jlabel的字体颜色即可。

    评论

报告相同问题?

问题事件

  • 创建了问题 12月5日

悬赏问题

  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记