批处理字体的大小和颜色
(不修改源代码)
耿祥义
摘要:不修改学生写的容器源代码的前提下,修改容器中的按钮以及文本框的字体大小和颜色。
一、窗口里的按钮和文本框
1.学生编写的窗口(模拟)
Calculation win= new Calculation();
在文本框里输入数字,单击相应按钮,文本框显示数字的某种计算结果,效果如图(计算了5的平方根):
2.学生的需求
“耿老师,我想修改按钮和文本框的字体的大小和颜色。”
耿老师不想更改学生的关于按钮和文本框所在容器的源文件。于是编写了一个ChangeFontAndColor类。学生只要用ChangeFontAndColor类调用
changeJButton(Container con,Font f,Color c)
方法就可以把自己容器con中的按钮的字体更改为f,颜色更改为c。
调用
hangeJTextField(Container con,Font f,Color c)
方法就可以把自己容器con中的文本框的字体更改为f,颜色更改为c。
//学生写好的窗体:
Calculation win= new Calculation();
//学生使用耿老师的代码:
Font f =
new Font("楷体",Font.BOLD,28);
ChangeFontAndColor.changeJButton
(win,f,Color.blue);
f =
new Font("宋体",Font.PLAIN,22);
ChangeFontAndColor.changeJTextField
(win,f,new Color(10,220,90));
效果如图:
二、视频讲解
复制
https://share.weiyun.com/C59pNM4x
到浏览器地址栏即可。
1.主类
import java.awt.Color;
import java.awt.Font;
public class MainClass {
public static void main(String arg[]){
Calculation win=
new Calculation();//学生的窗体
Font f = new Font("楷体",Font.BOLD,28);
//使用耿老师写的类修改字体和颜色:
ChangeFontAndColor.changeJButton
(win,f,Color.blue);
f = new Font("宋体",Font.PLAIN,22);
ChangeFontAndColor.changeJTextField
(win,f,new Color(10,220,90));
}
}
2.学生写的窗口(模拟)
import javax.swing.JFrame ;
import javax.swing.JButton;
import javax.swing.JTextField;
import java.awt.FlowLayout;
public class Calculation extends JFrame {
JButton sqrt;
JButton exp;
JTextField inputNumber;
public Calculation(){
setTitle("计算");
setLayout(new FlowLayout());
inputNumber = new JTextField("1",20);
sqrt = new JButton("平方根");
exp = new JButton("exp");
add(inputNumber);
add(sqrt);
add(exp);
sqrt.addActionListener((e)->
{ String s = inputNumber.getText();
try{
double x = Double.parseDouble(s);
double m = Math.sqrt(x);
inputNumber.setText(""+m);
}
catch(NumberFormatException exp){
inputNumber.setText("请输入数字");
}
});
exp.addActionListener((e)->
{ String s = inputNumber.getText();
try{
double x = Double.parseDouble(s);
double m = Math.exp(x);
inputNumber.setText(""+m);
}
catch(NumberFormatException exp){
inputNumber.setText("请输入数字");
}
});
setVisible(true);
setBounds(0,0,600,389);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
3.耿老师写的类(帮助批处理容器中按钮文本框的字体)
import javax.swing.*;
import java.awt.*;
public class ChangeFontAndColor {
public static void changeJButton(Container con,Font f,Color c){
Component[] com = null;
if(con instanceof JFrame ){
JFrame win =(JFrame)con;
com =
win.getContentPane().getComponents();
}
else if(con instanceof JDialog){
JDialog dialog =(JDialog)con;
com =
dialog.getContentPane().getComponents();
}
else if(con instanceof JComponent){
com = con.getComponents();
}
for(int i =0;i
if(com[i] instanceof JButton){
JButton b = (JButton)com[i];
b.setFont(f);
b.setForeground(c);
}
}
con.repaint();
con.validate();
}
public static void changeJTextField(Container con,Font f,Color c){
Component[] com = null;
if(con instanceof JFrame ){
JFrame win =(JFrame)con;
com =
win.getContentPane().getComponents();
}
else if(con instanceof JDialog){
JDialog dialog =(JDialog)con;
com =
dialog.getContentPane().getComponents();
}
else if(con instanceof JComponent){
com = con.getComponents();
}
for(int i =0;i
if(com[i] instanceof JTextField){
JTextField text = (JTextField)com[i];
text.setFont(f);
text.setForeground(c);
}
}
con.repaint();
con.validate();
}
}
领取专属 10元无门槛券
私享最新 技术干货