Java 如何在JTextPane中设置对齐?
我正在尝试用Java制作一个聊天应用程序;我选择使用Java 如何在JTextPane中设置对齐?,java,swing,Java,Swing,我正在尝试用Java制作一个聊天应用程序;我选择使用JTextPane来显示消息,因为我知道它支持对齐。我的问题是,我想知道如何对齐其中的文本。就像当我是发送者时,发送的消息将在右侧对齐;当我是接收器时,它会在左边对齐 以下是我编写的代码,但它将整个文本向右或向左对齐: package memory; import java.awt.BorderLayout; import java.awt.EventQueue; import javax.swing.JFrame; import java
JTextPane
来显示消息,因为我知道它支持对齐。我的问题是,我想知道如何对齐其中的文本。就像当我是发送者时,发送的消息将在右侧对齐;当我是接收器时,它会在左边对齐
以下是我编写的代码,但它将整个文本向右或向左对齐:
package memory;
import java.awt.BorderLayout;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.text.BadLocationException;
import javax.swing.text.SimpleAttributeSet;
import javax.swing.text.StyleConstants;
import javax.swing.text.StyledDocument;
import java.awt.Toolkit;
import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.LayoutStyle.ComponentPlacement;
import javax.swing.JTextPane;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.util.ArrayList;
import javax.swing.ScrollPaneConstants;
import java.awt.Font;
@SuppressWarnings("serial")
public class ChatFrame extends JFrame {
private JPanel contentPane;
private JTextPane textPane= new JTextPane();;
private String msg=null;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
ChatFrame frame = new ChatFrame();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
//setRemote Text
//false->me true->him
public void setTextToTextPane(String txt,boolean received) throws BadLocationException{
StyledDocument doc=textPane.getStyledDocument();
SimpleAttributeSet left = new SimpleAttributeSet();
StyleConstants.setAlignment(left, StyleConstants.ALIGN_LEFT);
SimpleAttributeSet right = new SimpleAttributeSet();
StyleConstants.setAlignment(right, StyleConstants.ALIGN_RIGHT);
if(received==false){
doc.insertString(doc.getLength(), txt="\n", right);
doc.setParagraphAttributes(doc.getLength(), 1, right, false);
}else{
doc.insertString(doc.getLength(), txt="\n", left);
doc.setParagraphAttributes(doc.getLength(), 1, left, false);
}
}
/**
* Create the frame.
*/
public ChatFrame() {
setIconImage(Toolkit.getDefaultToolkit().getImage("C:\\Users\\PC-HOME\\Desktop\\design\\Speech Bubble-41.png"));
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setBounds(100, 100, 299, 380);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
contentPane.setLayout(new BorderLayout(0, 0));
setContentPane(contentPane);
JPanel panel = new JPanel();
contentPane.add(panel, BorderLayout.CENTER);
JScrollPane scrollPane = new JScrollPane();
scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
JScrollPane scrollPane_1 = new JScrollPane();
GroupLayout gl_panel = new GroupLayout(panel);
gl_panel.setHorizontalGroup(
gl_panel.createParallelGroup(Alignment.LEADING)
.addGroup(gl_panel.createSequentialGroup()
.addGroup(gl_panel.createParallelGroup(Alignment.LEADING)
.addComponent(scrollPane, GroupLayout.PREFERRED_SIZE, 272, GroupLayout.PREFERRED_SIZE)
.addComponent(scrollPane_1, GroupLayout.PREFERRED_SIZE, 272, GroupLayout.PREFERRED_SIZE))
.addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
gl_panel.setVerticalGroup(
gl_panel.createParallelGroup(Alignment.LEADING)
.addGroup(Alignment.TRAILING, gl_panel.createSequentialGroup()
.addComponent(scrollPane_1, GroupLayout.DEFAULT_SIZE, 260, Short.MAX_VALUE)
.addPreferredGap(ComponentPlacement.RELATED)
.addComponent(scrollPane, GroupLayout.PREFERRED_SIZE, 65, GroupLayout.PREFERRED_SIZE))
);
textPane.setFont(new Font("Consolas", Font.PLAIN, 14));
textPane.setEditable(false);
scrollPane_1.setViewportView(textPane);
JTextArea textArea = new JTextArea();
textArea.setFont(new Font("Consolas", Font.PLAIN, 14));
textArea.setLineWrap(true);
textArea.setWrapStyleWord(true);
textArea.addKeyListener(new KeyAdapter() {
@SuppressWarnings("unchecked")
@Override
public void keyPressed(KeyEvent event) {
if(event.getKeyCode()==KeyEvent.VK_ENTER){
if(event.isShiftDown())
textArea.setText(textArea.getText()+"\n");
else{
msg=textArea.getText();
event.consume();
textArea.setText(null);
try {
//HelperMethods.sendMessageSocket(msg,port);
setTextToTextPane(msg,false);
} catch (BadLocationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
ArrayList<String> sendMsg=new ArrayList<>();
sendMsg.add(getTitle());
sendMsg.add(msg);
StaticData.sendMsg.add(sendMsg);
}
}
}
});
addWindowListener(new WindowListener() {
@Override
public void windowOpened(WindowEvent e) {
// TODO Auto-generated method stub
}
@Override
public void windowIconified(WindowEvent e) {
// TODO Auto-generated method stub
}
@Override
public void windowDeiconified(WindowEvent e) {
// TODO Auto-generated method stub
}
@Override
public void windowDeactivated(WindowEvent e) {
// TODO Auto-generated method stub
}
@Override
public void windowClosing(WindowEvent e) {
// TODO Auto-generated method stub
}
@Override
public void windowClosed(WindowEvent e) {
// TODO Auto-generated method stub
String name=getTitle();
StaticData.frameMap.remove(name);
}
@Override
public void windowActivated(WindowEvent e) {
// TODO Auto-generated method stub
}
});
scrollPane.setViewportView(textArea);
panel.setLayout(gl_panel);
}
}
封装存储器;
导入java.awt.BorderLayout;
导入java.awt.EventQueue;
导入javax.swing.JFrame;
导入javax.swing.JPanel;
导入javax.swing.border.EmptyBorder;
导入javax.swing.text.BadLocationException;
导入javax.swing.text.SimpleAttributeSet;
导入javax.swing.text.StyleConstants;
导入javax.swing.text.StyledDocument;
导入java.awt.Toolkit;
导入javax.swing.GroupLayout;
导入javax.swing.GroupLayout.Alignment;
导入javax.swing.JScrollPane;
导入javax.swing.JTextArea;
导入javax.swing.LayoutStyle.ComponentPlacement;
导入javax.swing.JTextPane;
导入java.awt.event.KeyAdapter;
导入java.awt.event.KeyEvent;
导入java.awt.event.WindowEvent;
导入java.awt.event.WindowListener;
导入java.util.ArrayList;
导入javax.swing.ScrollPaneConstants;
导入java.awt.Font;
@抑制警告(“串行”)
公共类ChatFrame扩展了JFrame{
私有JPanel内容窗格;
私有JTextPane textPane=新JTextPane();;
私有字符串msg=null;
/**
*启动应用程序。
*/
公共静态void main(字符串[]args){
invokeLater(新的Runnable(){
公开募捐{
试一试{
ChatFrame=新的ChatFrame();
frame.setVisible(true);
}捕获(例外e){
e、 printStackTrace();
}
}
});
}
//设置远程文本
//假->我是真->他
public void setTextToTextPane(字符串txt,布尔值已接收)引发BadLocationException{
StyledDocument doc=textPane.getStyledDocument();
SimpleAttributeSet left=新的SimpleAttributeSet();
StyleConstants.setAlignment(左,StyleConstants.ALIGN_左);
SimpleAttributeSet right=新的SimpleAttributeSet();
setAlignment(右,StyleConstants.ALIGN_right);
如果(接收==错误){
doc.insertString(doc.getLength(),txt=“\n”,右);
doc.setParagraphAttributes(doc.getLength(),1,右,false);
}否则{
doc.insertString(doc.getLength(),txt=“\n”,左);
doc.setParagraphAttributes(doc.getLength(),1,左,false);
}
}
/**
*创建框架。
*/
公共聊天框(){
setIconImage(Toolkit.getDefaultToolkit().getImage(“C:\\Users\\PC-HOME\\Desktop\\design\\Speech Bubble-41.png”);
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
立根(100100299380);
contentPane=newjpanel();
setboorder(新的EmptyBorder(5,5,5,5));
setLayout(新的BorderLayout(0,0));
setContentPane(contentPane);
JPanel面板=新的JPanel();
contentPane.add(面板,BorderLayout.CENTER);
JScrollPane scrollPane=新的JScrollPane();
scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HorizontalScrollBar\uNever);
JScrollPane scrollPane_1=新的JScrollPane();
GroupLayout gl_面板=新的GroupLayout(面板);
gl_panel.setHorizontalGroup(
gl_panel.createParallelGroup(对齐.引导)
.addGroup(gl_panel.createSequentialGroup()
.addGroup(gl_panel.createParallelGroup(Alignment.LEADING)
.addComponent(滚动窗格,GroupLayout.PREFERRED\u大小,272,GroupLayout.PREFERRED\u大小)
.addComponent(滚动窗格_1,GroupLayout.PREFERRED_大小,272,GroupLayout.PREFERRED_大小))
.addContainerGap(GroupLayout.DEFAULT_SIZE,Short.MAX_VALUE))
);
gl_panel.setVerticalGroup(
gl_panel.createParallelGroup(对齐.引导)
.addGroup(Alignment.TRAILING,gl_panel.createSequentialGroup()
.addComponent(滚动窗格_1,GroupLayout.DEFAULT_大小,260,Short.MAX_值)
.addPreferredGap(ComponentPlacement.RELATED)
.addComponent(滚动窗格,GroupLayout.PREFERRED_SIZE,65,GroupLayout.PREFERRED_SIZE))
);
setFont(新字体(“Consolas”,Font.PLAIN,14));
textPane.setEditable(false);
滚动窗格_1.setViewportView(文本窗格);
JTextArea textArea=新的JTextArea();
setFont(新字体(“Consolas”,Font.PLAIN,14));
textArea.setLineWrap(true);
textArea.setWrapStyleWord(true);
addKeyListener(新的KeyAdapter(){
@抑制警告(“未选中”)
@凌驾
按下公共无效键(KeyEvent事件){
if(event.getKeyCode()==KeyEvent.VK_ENTER){
if(event.isShiftDown())
textArea.setText(textArea.getText()+“\n”);
否则{
msg=textArea.getText();
event.consume();
textArea.setText(空);
试一试{
//sendMessageSocket(消息,端口);
setTextToTextPane(msg,false);
}捕获(错误位置异常e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
ArrayList sendMsg=新建ArrayList();
add(getTitle());
添加(msg);
StaticData.sendMsg.add(sendMsg);
}
}
}
});
addWindowListener(新建WindowListener(){
@凌驾
公共无效窗口已打开(WindowEvent e){
//TODO自动生成的方法存根
}
@凌驾
公共无效窗口图标化(WindowEvent e){
//TODO自动生成的方法存根
}
@凌驾
公共无效窗口取消确认(WindowEvent e){
//TODO自动生成的方法存根
}