首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何修改javax.swing.TreeCellRenderer以描边单元格中的文本

如何修改javax.swing.TreeCellRenderer以描边单元格中的文本
EN

Stack Overflow用户
提问于 2018-04-18 18:32:14
回答 1查看 29关注 0票数 0

有人知道应该如何修改javax.swing.TreeCellRenderer以便在单元格中描边文本吗?

EN

回答 1

Stack Overflow用户

发布于 2018-04-18 19:11:22

如果你想在某些栏中划出文本,你应该使用渲染器。如果所有单元格都需要此字体,只需修改表格的字体即可。下面是这两种变体的示例:

代码语言:javascript
复制
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.font.TextAttribute;
import java.util.Collections;
import java.util.Map;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.WindowConstants;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;

@SuppressWarnings("unchecked")
public class TableRendererTest {

    public static void main(String[] args) {
        JFrame frm = new JFrame("Renderer test");
        DefaultTableModel model = new DefaultTableModel(new String[] {"First", "Second", "Third" }, 3);
        model.setValueAt("Test String", 0, 0);
        model.setValueAt("Corner String", 2, 0);
        model.setValueAt("Last cell", 2, 2);

        // table with strike-out renderer (first column is stroked out)
        JTable tbl = new JTable(model);
        tbl.getColumnModel().getColumn(0).setCellRenderer(new StrikeOutRenderer());
        frm.add(new JScrollPane(tbl), BorderLayout.NORTH);

        // table with strike-out font (all cells are stroked out)
        JTable another = new JTable(model);
        another.setFont(
                another.getFont().deriveFont(Collections.singletonMap(TextAttribute.STRIKETHROUGH, TextAttribute.STRIKETHROUGH_ON)));
        frm.add(new JScrollPane(another), BorderLayout.SOUTH);
        frm.pack();
        frm.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        frm.setLocationRelativeTo(null);
        frm.setVisible(true);
    }

    private static class StrikeOutRenderer extends DefaultTableCellRenderer {

        @Override
        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row,
                int column) {
            Component res = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
            res.setFont(res.getFont().deriveFont(Collections.singletonMap(TextAttribute.STRIKETHROUGH, TextAttribute.STRIKETHROUGH_ON)));
            return res;
        }
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49897474

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档