在保持JTable默认渲染器的同时对齐JTable单元格中的文本?

编程入门 行业动态 更新时间:2024-10-27 02:26:18
本文介绍了在保持JTable默认渲染器的同时对齐JTable单元格中的文本?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

由于这段代码,我有一个JTable可以做出可爱的颜色变换:

I have a JTable that does lovely alternations in coloration thanks to this code:

table.setDefaultRenderer(Object.class, new BorderRenderer(new ColorRenderer(table .getDefaultRenderer(Object.class), colorProvider)));

(这里colorProvider包含将每隔一行变为浅灰色的代码。)我有一列我希望将文本对齐到中心。如果我只是在中心水平对齐的那一列上设置一个DefaultCellRenderer,它会覆盖表的默认渲染器,我会丢失可爱的条纹。

(Here the "colorProvider" contains code that turns every other row light grey.) I have one column in which I would like to align text to center. If I simply set a DefaultCellRenderer on that column with center horizontal alignment, it overrides the table's default renderer and I lose my lovely stripes.

我可以保留条纹并仍然更改列的对齐?

Can I keep the stripes and still change the alignment of a column?

为了使事情更复杂,我在超类中有上面的代码。我的子类知道他们想要更改对齐的列。

To further complicate things, I have the above code in a super class. It is my sub classes that know what column(s) they would like to change the alignment on.

推荐答案

非常感谢afk和camickr让我最终决定写一个TableCellRendererWrapper:

Thanks both to afk and camickr who led me to my final decision to write a TableCellRendererWrapper:

public class ColumnAlignmentRenderer implements TableCellRenderer { private TableCellRenderer mWrappedRenderer; private int mDefaultAlignment = SwingConstants.LEFT; private Map<Integer, Integer> mSpecialColumnAlignmentMap = new Hashtable<Integer, Integer>(); public ColumnAlignmentRenderer(TableCellRenderer pWrappedRenderer) { mWrappedRenderer = pWrappedRenderer; } public Component getTableCellRendererComponent(JTable pTable, Object pValue, boolean pIsSelected, boolean pHasFocus, int pRow, int pColumn) { // Use the wrapped renderer Component renderedComponent = mWrappedRenderer.getTableCellRendererComponent(pTable, pValue, pIsSelected, pHasFocus, pRow, pColumn); // Set the alignment Integer alignment = mSpecialColumnAlignmentMap.get(pColumn); if (alignment != null) { ((JLabel)renderedComponent).setHorizontalAlignment(alignment); } else { ((JLabel)renderedComponent).setHorizontalAlignment(mDefaultAlignment); } return renderedComponent; } public void setSpecialColumnAlignment(Integer pColumn, Integer pAlignment) { mSpecialColumnAlignmentMap.put(pColumn, pAlignment); } public void setDefaultAlignment(int pAlignment) { mDefaultAlignment = pAlignment; } }

这不是完美的,但它可以完成工作我。要使用它我执行此操作:

It's not perfect, but it gets the job done for me. To use it I do this:

// Center alignment for "selected" column ColumnAlignmentRenderer cellRenderer = new ColumnAlignmentRenderer(getTable().getDefaultRenderer(Object.class)); cellRenderer.setSpecialColumnAlignment(MyTableModel.COL_TO_CENTER, SwingConstants.CENTER); getTable().setDefaultRenderer(Object.class, cellRenderer); // Center alignmet for "selected" column header ColumnAlignmentRenderer headerRenderer = new ColumnAlignmentRenderer(getTable().getTableHeader().getDefaultRenderer()); headerRenderer.setSpecialColumnAlignment(MyTableModel.COL_TO_CENTER, SwingConstants.CENTER); getTable().getTableHeader().setDefaultRenderer(headerRenderer);

更多推荐

在保持JTable默认渲染器的同时对齐JTable单元格中的文本?

本文发布于:2023-11-23 02:06:54,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1619704.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:单元格   文本   渲染器   JTable

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!