java SWT点击button事件 textarea字体局部颜色变化

2024-11-16 04:47:07
推荐回答(3个)
回答(1):

//刚解决的,给你贴上看看吧、、、
package editor;
import java.awt.Color;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JColorChooser;
import javax.swing.JTextPane;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.Document;
import javax.swing.text.SimpleAttributeSet;
import javax.swing.text.StyleConstants;
import javax.swing.text.StyleContext;
import org.eclipse.swt.SWT;
import org.eclipse.swt.awt.SWT_AWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
public class Editor {
public static void main(String[] args) {
final Display display = Display.getDefault();
final Shell shell = new Shell();
shell.setSize(800, 600);
shell.setText("SWT_AWT_Swing Bridge");

//------------------新插入的界面核心代码----------//
shell.setLayout(null);
Composite comp = new Composite(shell, SWT.EMBEDDED);//SWT.EMBEDDED必须
comp.setSize(800, 600);
comp.setLocation(0,0);

final java.awt.Frame frame = SWT_AWT.new_Frame(comp);//只能放Frame不能放JFrame

//*******************现在frame里面可以任意放AWT和Swing中的组件*************//

frame.setLayout(null);
final JTextPane editorPane = new JTextPane();// 实例化一个文本编辑的控件
editorPane.setSize(800, 500);
editorPane.setLocation(0, 100);
final JButton button = new JButton("Change");
button.setSize(100,100);
button.setLocation(0, 0);
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
JColorChooser colorChooser = new JColorChooser();// 根据所选颜色进行设置
Color color = colorChooser.showDialog(null, "字体颜色", Color.BLACK);// 得到所选颜色
Document document = editorPane.getDocument();// 得到编辑器中的文档
StyleContext sc = StyleContext.getDefaultStyleContext();// 添加一个可以设置样式的类
AttributeSet aset = sc.addAttribute(SimpleAttributeSet.EMPTY,
StyleConstants.Foreground, color);// 为所添加的样式类添加字体颜色
Font font = new Font("隶书", Font.BOLD, 30);
aset = sc.addAttribute(aset, StyleConstants.Family,
font.getFamily());// 为添加的样式类添加字体
aset = sc.addAttribute(aset, StyleConstants.FontSize, 30);// 设置字体的大小
try {
int start = editorPane.getSelectionStart();
int end = editorPane.getSelectionEnd();
String str = document.getText(start, end - start);
document.remove(start, end - start);// 由于没找到直接设置所选字的方法,只有先移除原来的字符串
document.insertString(start, str, aset);// 重新插入字符串,并按新设置的样式进行插入
} catch (Exception exc) {
exc.printStackTrace();
}
}
});
frame.add(editorPane);
frame.add(button);
//*****************************************************************//
//------------------END------------------------//

shell.layout();
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
}

回答(2):

textarea是不能实现这个功能的。你可以用jeditorPane来实现,但是如楼上所说,必须用到html的相关知识。jeditorPane实现局部文字变色也是通过解析其中的html来实现的。

回答(3):

是swt还是swing是支持html的..意思是字体颜色大小格式全都可以,比如一个button就能换行粗体等...至于显示应该也支持.就算textarea不支持的话jeditorPane一定可以,,需要一些html基础