运行效果

代码
import javax.swing.*;
import javax.swing.text.DefaultStyledDocument;
import javax.swing.text.SimpleAttributeSet;
import javax.swing.text.StyleConstants;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.HashMap;
import java.util.Map;
public class demo2 extends JFrame {
JTextPane text = new JTextPane();
DefaultStyledDocument doc = (DefaultStyledDocument)text.getDocument(); //从文字面板建立默认样式化文档
SimpleAttributeSet set = new SimpleAttributeSet(); //建立一个样式属性集合
JComboBox fonts,sizes,colors;
JButton ensure,cancel;
String[] font ={"宋体","黑体","楷体","仿宋"};
String[] size ={"10号","12号","14号","16号"};
String[] color = {"黑色","红色","绿色","蓝色"};
int start=0;
int end=0;
public demo2(){
super();
this.setLayout(new GridLayout(1,2)); //网格布局,一行二列
text.setText("这是一行文本,你可以使用右边的选项来改变s字体的样式");
text.setFont(new Font(font[0],Font.PLAIN,10));//设置默认为宋体10号
this.add(text);
JPanel panel = new JPanel(new GridLayout(5,2));
panel.add(new JLabel("字体设置"));
panel.add(new JLabel());
panel.add(new JLabel("字体:"));
panel.add(fonts=new JComboBox(font));
panel.add(new JLabel("字号:"));
panel.add(sizes=new JComboBox(size));
panel.add(new JLabel("颜色:"));
panel.add(colors=new JComboBox(color));
panel.add(ensure=new JButton("确定"));
panel.add(cancel=new JButton("取消"));
this.add(panel);
//添加监听
Action action = new Action();
fonts.addActionListener(action);
sizes.addActionListener(action);
colors.addActionListener(action);
ensure.addActionListener(action);
cancel.addActionListener(action);
//文本面板添加鼠标监听,用于获取选中的文字
Mouse mouse = new Mouse();
text.addMouseListener(mouse);
this.setSize(350,150);
this.setVisible(true);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
}
class Action implements ActionListener{
//建立映射
int[] sizeen = {10,12,14,16};
Color[] coloren = {Color.BLACK,Color.RED,Color.GREEN,Color.BLUE};
Map<String,Integer> sizeMap = new HashMap<>();
Map<String,Color> colorMap = new HashMap<>();
@Override
public void actionPerformed(ActionEvent e) {
for (int i = 0; i < 4; i++) {
sizeMap.put(size[i],sizeen[i]);
colorMap.put(color[i],coloren[i]);
}
Object source = e.getSource();
String f = (String)fonts.getSelectedItem();
String s = (String)sizes.getSelectedItem();
String c = (String)colors.getSelectedItem();
set.addAttribute(StyleConstants.FontFamily,f); //设置选择的字体
set.addAttribute(StyleConstants.Size,sizeMap.get(s)); //设置选择的字号
set.addAttribute(StyleConstants.Foreground,colorMap.get(c)); //设置选择的颜色
//点击确定按钮
if (source.equals(ensure)){
doc.setCharacterAttributes(0,text.getText().length(),set,false); //所有文本更改为所选样式
}else if (source.equals(cancel)){ //点击取消按钮
//样式回归默认
set.addAttribute(StyleConstants.FontFamily,font[0]);
set.addAttribute(StyleConstants.FontSize,sizeen[0]);
set.addAttribute(StyleConstants.Foreground,coloren[0]);
doc.setCharacterAttributes(0,text.getText().length(),set,false); //所有文本改为默认样式
//列表框选项归位
fonts.setSelectedItem(font[0]);
sizes.setSelectedItem(size[0]);
colors.setSelectedItem(color[0]);
}else if (source.equals(fonts)|source.equals(sizes)|source.equals(colors)){ //如果选择了文本,更改列表框选项时会即时修改样式
doc.setCharacterAttributes(start,end,set,false); //即时修改选择的文本为指定样式
}
}
}
class Mouse implements MouseListener{
@Override
public void mouseClicked(MouseEvent e) {
}
@Override
public void mousePressed(MouseEvent e) {
}
@Override
public void mouseReleased(MouseEvent e) {
//获取选择的文本的开始坐标和长度
start=text.getSelectionStart();
end=text.getSelectionEnd()-start;
}
@Override
public void mouseEntered(MouseEvent e) {
}
@Override
public void mouseExited(MouseEvent e) {
}
}
public static void main(String[] args) {
new demo2();
}
}