import
java.awt.BorderLayout;
import
java.awt.Color;
import
java.awt.event.ActionEvent;
import
java.awt.event.ActionListener;
import
java.io.File;
import
javax.swing.BorderFactory;
import
javax.swing.Box;
import
javax.swing.ImageIcon;
import
javax.swing.JButton;
import
javax.swing.JComboBox;
import
javax.swing.JFileChooser;
import
javax.swing.JFrame;
import
javax.swing.JLabel;
import
javax.swing.JScrollPane;
import
javax.swing.JTextField;
import
javax.swing.JTextPane;
import
javax.swing.UIManager;
import
javax.swing.text.BadLocationException;
import
javax.swing.text.SimpleAttributeSet;
import
javax.swing.text.StyleConstants;
import
javax.swing.text.StyledDocument;
/**
* JTextPane的例子,模拟聊天客户端,演示了为每段文字设置字体、字号、样式、颜色、背景色和插入图片功能
*
@author
五斗米 <如转载请保留作者和出处>
* @blog
*/
public
class
Test
extends
JFrame {
private
static
final
long
serialVersionUID
=
-
2397593626990759111L
;
private
JScrollPane scrollPane
=
null
;
//
滚动
private
JTextPane text
=
null
;
//
不用说了,如果不认识的话就没必要往后看了
private
Box box
=
null
;
//
放输入组件的容器
private
JButton b_insert
=
null
, b_remove
=
null
, b_icon
=
null
;
//
插入按钮;清除按钮;插入图片按钮
private
JTextField addText
=
null
;
//
文字输入框
private
JComboBox fontName
=
null
, fontSize
=
null
, fontStyle
=
null
, fontColor
=
null
,
fontBackColor
=
null
;
//
字体名称;字号大小;文字样式;文字颜色;文字背景颜色
private
StyledDocument doc
=
null
;
//
非常重要插入文字样式就靠它了
public
Test() {
super
(
"
JTextPane Test
"
);
try
{
//
使用Windows的界面风格
UIManager.setLookAndFeel(
"
com.sun.java.swing.plaf.windows.WindowsLookAndFeel
"
);
}
catch
(Exception e) {
e.printStackTrace();
}
text
=
new
JTextPane();
text.setEditable(
false
);
//
不可录入
doc
=
text.getStyledDocument();
//
获得JTextPane的Document
scrollPane
=
new
JScrollPane(text);
addText
=
new
JTextField(
18
);
String[] str_name
=
{
"
宋体
"
,
"
黑体
"
,
"
Dialog
"
,
"
Gulim
"
};
String[] str_Size
=
{
"
12
"
,
"
14
"
,
"
18
"
,
"
22
"
,
"
30
"
,
"
40
"
};
String[] str_Style
=
{
"
常规
"
,
"
斜体
"
,
"
粗体
"
,
"
粗斜体
"
};
String[] str_Color
=
{
"
黑色
"
,
"
红色
"
,
"
蓝色
"
,
"
黄色
"
,
"
绿色
"
};
String[] str_BackColor
=
{
"
无色
"
,
"
灰色
"
,
"
淡红
"
,
"
淡蓝
"
,
"
淡黄
"
,
"
淡绿
"
};
fontName
=
new
JComboBox(str_name);
//
字体名称
fontSize
=
new
JComboBox(str_Size);
//
字号
fontStyle
=
new
JComboBox(str_Style);
//
样式
fontColor
=
new
JComboBox(str_Color);
//
颜色
fontBackColor
=
new
JComboBox(str_BackColor);
//
背景颜色
b_insert
=
new
JButton(
"
插入
"
);
//
插入
b_remove
=
new
JButton(
"
清空
"
);
//
清除
b_icon
=
new
JButton(
"
图片
"
);
//
插入图片
b_insert.addActionListener(
new
ActionListener() {
//
插入文字的事件
public
void
actionPerformed(ActionEvent e) {
insert(getFontAttrib());
addText.setText(
""
);
}
});
b_remove.addActionListener(
new
ActionListener() {
//
清除事件
public
void
actionPerformed(ActionEvent e) {
text.setText(
""
);
}
});
b_icon.addActionListener(
new
ActionListener() {
//
插入图片事件
public
void
actionPerformed(ActionEvent arg0) {
JFileChooser f
=
new
JFileChooser();
//
查找文件
f.showOpenDialog(
null
);
insertIcon(f.getSelectedFile());
//
插入图片
}
});
box
=
Box.createVerticalBox();
//
竖结构
Box box_1
=
Box.createHorizontalBox();
//
横结构
Box box_2
=
Box.createHorizontalBox();
//
横结构
box.add(box_1);
box.add(Box.createVerticalStrut(
8
));
//
两行的间距
box.add(box_2);
box.setBorder(BorderFactory.createEmptyBorder(
8
,
8
,
8
,
8
));
//
8个的边距
//
开始将所需组件加入容器
box_1.add(
new
JLabel(
"
字体:
"
));
//
加入标签
box_1.add(fontName);
//
加入组件
box_1.add(Box.createHorizontalStrut(
8
));
//
间距
box_1.add(
new
JLabel(
"
样式:
"
));
box_1.add(fontStyle);
box_1.add(Box.createHorizontalStrut(
8
));
box_1.add(
new
JLabel(
"
字号:
"
));
box_1.add(fontSize);
box_1.add(Box.createHorizontalStrut(
8
));
box_1.add(
new
JLabel(
"
颜色:
"
));
box_1.add(fontColor);
box_1.add(Box.createHorizontalStrut(
8
));
box_1.add(
new
JLabel(
"
背景:
"
));
box_1.add(fontBackColor);
box_1.add(Box.createHorizontalStrut(
8
));
box_1.add(b_icon);
box_2.add(addText);
box_2.add(Box.createHorizontalStrut(
8
));
box_2.add(b_insert);
box_2.add(Box.createHorizontalStrut(
8
));
box_2.add(b_remove);
this
.getRootPane().setDefaultButton(b_insert);
//
默认回车按钮
this
.getContentPane().add(scrollPane);
this
.getContentPane().add(box, BorderLayout.SOUTH);
this
.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this
.setSize(
600
,
400
);
this
.setLocationRelativeTo(
null
);
this
.setVisible(
true
);
addText.requestFocus();
}
/**
* 插入图片
*
*
@param
icon
*/
private
void
insertIcon(File file) {
text.setCaretPosition(doc.getLength());
//
设置插入位置
text.insertIcon(
new
ImageIcon(file.getPath()));
//
插入图片
insert(
new
FontAttrib());
//
这样做可以换行
}
/**
* 将文本插入JTextPane
*
*
@param
attrib
*/
private
void
insert(FontAttrib attrib) {
try
{
//
插入文本
doc.insertString(doc.getLength(), attrib.getText()
+
"
/n
"
, attrib.getAttrSet());
}
catch
(BadLocationException e) {
e.printStackTrace();
}
}
/**
* 获取所需要的文字设置
*
*
@return
FontAttrib
*/
private
FontAttrib getFontAttrib() {
FontAttrib att
=
new
FontAttrib();
att.setText(addText.getText());
att.setName((String) fontName.getSelectedItem());
att.setSize(Integer.parseInt((String) fontSize.getSelectedItem()));
String temp_style
=
(String) fontStyle.getSelectedItem();
if
(temp_style.equals(
"
常规
"
)) {
att.setStyle(FontAttrib.GENERAL);
}
else
if
(temp_style.equals(
"
粗体
"
)) {
att.setStyle(FontAttrib.BOLD);
}
else
if
(temp_style.equals(
"
斜体
"
)) {
att.setStyle(FontAttrib.ITALIC);
}
else
if
(temp_style.equals(
"
粗斜体
"
)) {
att.setStyle(FontAttrib.BOLD_ITALIC);
}
String temp_color
=
(String) fontColor.getSelectedItem();
if
(temp_color.equals(
"
黑色
"
)) {
att.setColor(
new
Color(
0
,
0
,
0
));
}
else
if
(temp_color.equals(
"
红色
"
)) {
att.setColor(
new
Color(
255
,
0
,
0
));
}
else
if
(temp_color.equals(
"
蓝色
"
)) {
att.setColor(
new
Color(
0
,
0
,
255
));
}
else
if
(temp_color.equals(
"
黄色
"
)) {
att.setColor(
new
Color(
255
,
255
,
0
));
}
else
if
(temp_color.equals(
"
绿色
"
)) {
att.setColor(
new
Color(
0
,
255
,
0
));
}
String temp_backColor
=
(String) fontBackColor.getSelectedItem();
if
(
!
temp_backColor.equals(
"
无色
"
)) {
if
(temp_backColor.equals(
"
灰色
"
)) {
att.setBackColor(
new
Color(
200
,
200
,
200
));
}
else
if
(temp_backColor.equals(
"
淡红
"
)) {
att.setBackColor(
new
Color(
255
,
200
,
200
));
}
else
if
(temp_backColor.equals(
"
淡蓝
"
)) {
att.setBackColor(
new
Color(
200
,
200
,
255
));
}
else
if
(temp_backColor.equals(
"
淡黄
"
)) {
att.setBackColor(
new
Color(
255
,
255
,
200
));
}
else
if
(temp_backColor.equals(
"
淡绿
"
)) {
att.setBackColor(
new
Color(
200
,
255
,
200
));
}
}
return
att;
}
public
static
void
main(String args[]) {
new
Test();
}
/**
* 字体的属性类
*/
private
class
FontAttrib {
public
static
final
int
GENERAL
=
0
;
//
常规
public
static
final
int
BOLD
=
1
;
//
粗体
public
static
final
int
ITALIC
=
2
;
//
斜体
public
static
final
int
BOLD_ITALIC
=
3
;
//
粗斜体
private
SimpleAttributeSet attrSet
=
null
;
//
属性集
private
String text
=
null
, name
=
null
;
//
要输入的文本和字体名称
private
int
style
=
0
, size
=
0
;
//
样式和字号
private
Color color
=
null
, backColor
=
null
;
//
文字颜色和背景颜色
/**
* 一个空的构造(可当做换行使用)
*/
public
FontAttrib() {
}
/**
* 返回属性集
*
*
@return
*/
public
SimpleAttributeSet getAttrSet() {
attrSet
=
new
SimpleAttributeSet();
if
(name
!=
null
)
StyleConstants.setFontFamily(attrSet, name);
if
(style
==
FontAttrib.GENERAL) {
StyleConstants.setBold(attrSet,
false
);
StyleConstants.setItalic(attrSet,
false
);
}
else
if
(style
==
FontAttrib.BOLD) {
StyleConstants.setBold(attrSet,
true
);
StyleConstants.setItalic(attrSet,
false
);
}
else
if
(style
==
FontAttrib.ITALIC) {
StyleConstants.setBold(attrSet,
false
);
StyleConstants.setItalic(attrSet,
true
);
}
else
if
(style
==
FontAttrib.BOLD_ITALIC) {
StyleConstants.setBold(attrSet,
true
);
StyleConstants.setItalic(attrSet,
true
);
}
StyleConstants.setFontSize(attrSet, size);
if
(color
!=
null
)
StyleConstants.setForeground(attrSet, color);
if
(backColor
!=
null
)
StyleConstants.setBackground(attrSet, backColor);
return
attrSet;
}
/**
* 设置属性集
*
*
@param
attrSet
*/
public
void
setAttrSet(SimpleAttributeSet attrSet) {
this
.attrSet
=
attrSet;
}
/*
后面的注释就不写了,一看就明白
*/
public
String getText() {
return
text;
}
public
void
setText(String text) {
this
.text
=
text;
}
public
Color getColor() {
return
color;
}
public
void
setColor(Color color) {
this
.color
=
color;
}
public
Color getBackColor() {
return
backColor;
}
public
void
setBackColor(Color backColor) {
this
.backColor
=
backColor;
}
public
String getName() {
return
name;
}
public
void
setName(String name) {
this
.name
=
name;
}
public
int
getSize() {
return
size;
}
public
void
setSize(
int
size) {
this
.size
=
size;
}
public
int
getStyle() {
return
style;
}
public
void
setStyle(
int
style) {
this
.style
=
style;
}
}
}
JProcessBar修改文字颜色
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
上一篇:蓝牙mesh手机
下一篇:eMMC中VDDi引脚
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
MFC 修改button、checkbox按钮的文字颜色
MFC 修改button、checkbox按钮的文字颜色
mfc windows c++ 头文件