Java JTextPane中的垂直和水平对齐

Java JTextPane中的垂直和水平对齐,java,swing,jtable,jtextpane,text-alignment,Java,Swing,Jtable,Jtextpane,Text Alignment,我试图在JTable中插入一个值。但我遇到了一些问题(设计)。当我尝试添加一个值时,通常单词/换行不起作用,所以我尝试插入嵌入HTML标记的值 <html>Value</html> 我的代码有什么问题,有人能帮我纠正吗?提前谢谢 您只需使用普通的HTML和默认的TableCellRenderer,它基于JLabel,即可实现这一基本原则 下面的示例使用html表格,它进一步将文本(断线)与标签的中心对齐。它使用JLabel的水平对齐和垂直对齐属性来对齐标签内的内容 它还

我试图在JTable中插入一个值。但我遇到了一些问题(设计)。当我尝试添加一个值时,通常单词/换行不起作用,所以我尝试插入嵌入HTML标记的值

<html>Value</html>
我的代码有什么问题,有人能帮我纠正吗?提前谢谢


您只需使用普通的
HTML
和默认的
TableCellRenderer
,它基于
JLabel
,即可实现这一基本原则

下面的示例使用
html
表格
,它进一步将文本(断线)与标签的中心对齐。它使用
JLabel
水平对齐
垂直对齐
属性来对齐标签内的内容

它还对行高进行了一些小技巧;)

导入java.awt.Component;
导入java.awt.EventQueue;
导入javax.swing.JFrame;
导入javax.swing.JLabel;
导入javax.swing.JScrollPane;
导入javax.swing.JTable;
导入javax.swing.UIManager;
导入javax.swing.UnsupportedLookAndFeelException;
导入javax.swing.table.DefaultTableModel;
公开课考试{
公共静态void main(字符串[]args){
新测试();
}
公开考试(){
invokeLater(新的Runnable(){
@凌驾
公开募捐{
试一试{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}catch(ClassNotFoundException |实例化Exception | IllegalacessException |不支持ookandfeelException ex){
例如printStackTrace();
}
字符串文本
= ""
+“还有凯撒的灵魂,为复仇而愤怒,
” +“有他在身边,从地狱来的热气,
” +“将以君主的声音在这些禁锢中
” +“呼喊“大破坏!”,让战争的狗溜走,
” +“这肮脏的行为将在地球上散发出臭味
” +“和腐肉人一起,呻吟着要埋葬。”; DefaultTableModel=新的DefaultTableModel(0,1); addRow(新字符串[]{text}); JTable表格=新JTable(型号){ @凌驾 公共整数getRowHeight(整数行){ 组件组件=prepareRenderer(getCellRenderer(第0行),第0行); 返回comp.getPreferredSize()高度; } }; ((JLabel)table.getDefaultRenderer(Object.class)).setHorizontalAlignment(JLabel.CENTER); ((JLabel)table.getDefaultRenderer(Object.class)).setVerticalAlignment(JLabel.CENTER); 表1.设置行高(100); JFrame=新JFrame(“测试”); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.add(新的JScrollPane(表)); frame.pack(); frame.setLocationRelativeTo(空); frame.setVisible(true); } }); } }

现在,我对文本进行了预包装,并将其应用于模型。您可以创建自定义的
TableCellRenderer
(使用
DefaultTableCellRenderer
)并根据需要对文本进行后包装您可以只使用纯
HTML
和默认的
TableCellRenderer
,它基于
JLabel
来实现这一基本原则

下面的示例使用
html
表格
,它进一步将文本(断线)与标签的中心对齐。它使用
JLabel
水平对齐
垂直对齐
属性来对齐标签内的内容

它还对行高进行了一些小技巧;)

导入java.awt.Component;
导入java.awt.EventQueue;
导入javax.swing.JFrame;
导入javax.swing.JLabel;
导入javax.swing.JScrollPane;
导入javax.swing.JTable;
导入javax.swing.UIManager;
导入javax.swing.UnsupportedLookAndFeelException;
导入javax.swing.table.DefaultTableModel;
公开课考试{
公共静态void main(字符串[]args){
新测试();
}
公开考试(){
invokeLater(新的Runnable(){
@凌驾
公开募捐{
试一试{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}catch(ClassNotFoundException |实例化Exception | IllegalacessException |不支持ookandfeelException ex){
例如printStackTrace();
}
字符串文本
= ""
+“还有凯撒的灵魂,为复仇而愤怒,
” +“有他在身边,从地狱来的热气,
” +“将以君主的声音在这些禁锢中
” +“呼喊“大破坏!”,让战争的狗溜走,
” +“这肮脏的行为将在地球上散发出臭味
” +“和腐肉人一起,呻吟着要埋葬。”; DefaultTableModel=新的DefaultTableModel(0,1); addRow(新字符串[]{text}); JTable表格=新JTable(型号){ @凌驾 公共整数getRowHeight(整数行){ 组件组件=prepareRenderer(getCellRenderer(第0行),第0行); 返回comp.getPreferredSize()高度; } }; ((JLabel)table.getDefaultRenderer(Object.class)
class TableCellLongTextRenderer extends JTextPane implements TableCellRenderer {    
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
    this.setText((String) value);
    StyledDocument doc = this.getStyledDocument();
    SimpleAttributeSet center = new SimpleAttributeSet();
    StyleConstants.setAlignment(center, StyleConstants.ALIGN_CENTER);
    StyleConstants.setSpaceAbove(center, StyleConstants.getSpaceBelow(center) / 2);
    StyleConstants.setSpaceBelow(center, StyleConstants.getSpaceAbove(center));
    doc.setParagraphAttributes(0, doc.getLength(), center, false);
    return this;
}}
import java.awt.Component;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.table.DefaultTableModel;

public class Test {

    public static void main(String[] args) {
        new Test();
    }

    public Test() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                    ex.printStackTrace();
                }

                String text
                                = "<html><div align=center>"
                                + "And Caesar's spirit, raging for revenge,<br>"
                                + "With Ate by his side come hot from hell,<br>"
                                + "Shall in these confines with a monarch's voice<br>"
                                + "Cry \"Havoc!\" and let slip the dogs of war,<br>"
                                + "That this foul deed shall smell above the earth<br>"
                                + "With carrion men, groaning for burial.";

                DefaultTableModel model = new DefaultTableModel(0, 1);
                model.addRow(new String[]{text});

                JTable table = new JTable(model) {
                    @Override
                    public int getRowHeight(int row) {
                        Component comp = prepareRenderer(getCellRenderer(row, 0), row, 0);
                        return comp.getPreferredSize().height;
                    }
                };
                ((JLabel)table.getDefaultRenderer(Object.class)).setHorizontalAlignment(JLabel.CENTER);
                ((JLabel)table.getDefaultRenderer(Object.class)).setVerticalAlignment(JLabel.CENTER);
                table.setRowHeight(100);

                JFrame frame = new JFrame("Testing");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.add(new JScrollPane(table));
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

}