gpt4 book ai didi

java - 在不使用 DefaultTableCellRenderer 的情况下设置 JTable 列水平对齐

转载 作者:行者123 更新时间:2023-11-29 03:01:00 25 4
gpt4 key购买 nike

我有以下 TableCellRenderer(不是 DefaultTableCellRenderer),它允许我在 JTable 的单元格中跳过行:

import java.awt.Color;
import java.awt.Component;
import javax.swing.JTable;
import javax.swing.JTextArea;
import javax.swing.UIManager;
import javax.swing.table.TableCellRenderer;

public class MyCellRenderer extends JTextArea implements TableCellRenderer {

Color highlightBackground = (Color) UIManager.get("Table.selectionBackground");

public MyCellRenderer() {
setLineWrap(true);
setWrapStyleWord(true);
}

@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
setText((String) value); //or something in value, like value.getNote()...
setSize(table.getColumnModel().getColumn(column).getWidth(), getPreferredSize().height);
if (table.getRowHeight(row) != getPreferredSize().height) {
table.setRowHeight(row, getPreferredSize().height);
}
if (table.isRowSelected(row)) {
this.setBackground(highlightBackground);
} else {
this.setBackground(Color.WHITE);
}
return this;
}
}

我只想更改此渲染器的水平对齐方式。 (这意味着单元格的文本会在它们的中心或右侧,现在是左侧)。

下面是我如何使用这个 TableCellRenderer :

Table.getColumnModel().getColumn(1).setCellRenderer(new MyCellRenderer());

enter image description here

最佳答案

我已经找到答案了,谢谢TT。对于提示,我只是删除了自定义构造函数及其换行符,扩展了 JTextPane,并添加了几行代码。对于需要允许跳过行和设置单元格水平对齐的类的任何人,这里是代码:

import java.awt.Color;
import java.awt.Component;
import javax.swing.JTable;
import javax.swing.JTextPane;
import javax.swing.UIManager;
import javax.swing.table.TableCellRenderer;
import javax.swing.text.SimpleAttributeSet;
import javax.swing.text.StyleConstants;
import javax.swing.text.StyledDocument;

public class MyCellRenderer extends JTextPane implements TableCellRenderer {

Color highlightBackground = (Color) UIManager.get("Table.selectionBackground");

@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
setText((String) value);//or something in value, like value.getNote()...
setSize(table.getColumnModel().getColumn(column).getWidth(),
getPreferredSize().height);
if (table.getRowHeight(row) != getPreferredSize().height) {
table.setRowHeight(row, getPreferredSize().height);
}
if (table.isRowSelected(row)) {
this.setBackground(highlightBackground);
} else {
this.setBackground(Color.WHITE);
}

//Added lines
StyledDocument doc = this.getStyledDocument();
SimpleAttributeSet center = new SimpleAttributeSet();
StyleConstants.setAlignment(center, StyleConstants.ALIGN_CENTER);
doc.setParagraphAttributes(0, doc.getLength(), center, false);
//Added Lines

return this;
}
}

关于java - 在不使用 DefaultTableCellRenderer 的情况下设置 JTable 列水平对齐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34931898/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com