第二次发了,我也曾试着努力去做出来,但是总有许多坎坷挡在面前却没有人能够指引我前进
只希望大家能帮我做出合适的代码
思路: 设置字体程序中,新增一个文本域,将时钟显示放在文本域中,监听字体事件,动态去修改时钟字体颜色。
问题相关代码
颜色程序代码
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();
}
}
下面是每个程序的运行照片