jtable中整个行的删除线 [英] Strikethrough for entire row in jtable
问题描述
我有一个JTable
,它通过mysql数据库获取它们的值.我制作了几个customcolumn渲染器,以使JTable
显示需要时格式化的数据.我现在需要的是在某些行上添加删除线,具体取决于每行最后一个单元格(5)上的值是否具有特定的字符串值(例如test).删除线必须位于该行的每个单元格中,最后一个单元格除外(具有测试值).可以与其他自定义列渲染器一起使用而不会混淆吗?
I have a JTable
that takes their value over a mysql data base. I made several customcolumn renderers in order the JTable
to show the data formated as I need them. What I need now is to add some strikethrough over some rows depending if the value on the last cell (5) in each row has a specific string value, (test) for example. The strike through must be in each cell of the row except the last cell (that has the test value). Can it work with the other custom column renderers without anything to mix up?
谢谢!
推荐答案
-
为什么是HTML,为什么不使用充分尊重HFOE,并分享他的知识(forums.sun.com)
with all due respect to HFOE, and his knowledges sharing (forums.sun.com)
来自代码
import java.awt.*; import java.awt.font.TextAttribute; import java.util.Map; import javax.swing.*; import javax.swing.border.Border; import javax.swing.border.CompoundBorder; import javax.swing.border.EmptyBorder; import javax.swing.border.MatteBorder; import javax.swing.table.*; public class TablePrepareRenderer extends JFrame { private static final long serialVersionUID = 1L; private JTable table; public TablePrepareRenderer() { Object[] columnNames = {"Type", "Company", "Shares", "Price", "Boolean"}; Object[][] data = { {"Buy", "IBM", new Integer(1000), new Double(80.50), false}, {"Sell", "MicroSoft", new Integer(2000), new Double(6.25), true}, {"Sell", "Apple", new Integer(3000), new Double(7.35), true}, {"Buy", "Nortel", new Integer(4000), new Double(20.00), false} }; DefaultTableModel model = new DefaultTableModel(data, columnNames) { private static final long serialVersionUID = 1L; @Override public Class getColumnClass(int column) { return getValueAt(0, column).getClass(); } }; table = new JTable(model) { private static final long serialVersionUID = 1L; private Border outside = new MatteBorder(1, 0, 1, 0, Color.red); private Border inside = new EmptyBorder(0, 1, 0, 1); private Border highlight = new CompoundBorder(outside, inside); @Override public Component prepareRenderer(TableCellRenderer renderer, int row, int column) { Component comp = super.prepareRenderer(renderer, row, column); JComponent jc = (JComponent) comp; Map attributes = (new Font("Serif", Font.PLAIN, 12)).getAttributes(); //attributes.put(TextAttribute.WEIGHT, TextAttribute.WEIGHT_BOLD); attributes.put(TextAttribute.STRIKETHROUGH, TextAttribute.STRIKETHROUGH_ON); if (!isRowSelected(row)) { comp.setForeground(Color.black); comp.setBackground(row % 2 == 0 ? Color.white : Color.orange); int modelRow = convertRowIndexToModel(row); String type = (String) getModel().getValueAt(modelRow, 0); if (type.equals("Sell")) { comp.setFont(new Font(attributes)); comp.setForeground(Color.red); } else { comp.setFont(new Font("Serif", Font.BOLD, 12)); } } else { comp.setFont(table.getFont()); } jc.setBorder(BorderFactory.createCompoundBorder(jc.getBorder(), BorderFactory.createEmptyBorder(0, 0, 0, 5))); return comp; } }; table.setPreferredScrollableViewportSize(table.getPreferredSize()); JScrollPane scrollPane = new JScrollPane(table); getContentPane().add(scrollPane); } public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { TablePrepareRenderer frame = new TablePrepareRenderer(); frame.setDefaultCloseOperation(EXIT_ON_CLOSE); frame.pack(); frame.setLocationRelativeTo(null); frame.setVisible(true); } }); } }
这篇关于jtable中整个行的删除线的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!