我有一个JTable
超过mysql数据库的价值。我制作了几个customcolumn渲染器,JTable
以显示所需格式的数据。我现在需要的是在某些行上添加删除线,具体取决于每行最后一个单元格(5)上的值是否具有特定的字符串值(例如test)。删除线必须位于该行的每个单元格中,最后一个单元格除外(具有测试值)。它可以与其他自定义列渲染器一起使用而不会混淆吗?
谢谢!
为什么是HTML,为什么不直接使用TextAttribute
充分尊重HFOE,并分享他的知识(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);
}
});
}
}
我正在用java创建一个没有数据库的库系统程序。(直接使用文件)。 我在删除jtable中的一行时遇到了一个奇怪的问题(也就是从文件中删除)。 有时当我在表格中选择一行并单击删除按钮时,不止一行被删除了! 大多数时候它也能正常工作!! 我的代码: 我的模型类: 用户信息类别: 我的文本文件:
问题内容: 我需要删除JTable中的所有行。 我已经尝试了以下两种方法: 和 两者都不会删除所有行。有任何想法吗? 问题答案: 以下代码为我工作:
我有一个框架,里面有一张桌子和两个按钮。 1) 重复行2)删除行 表a在第三列中的组合 我有一个场景,我复制空白行并点击最后一排的组合框来选择该行,然后单击删除行按钮…然后在删除后,每当我尝试单击任何单元格时,它都会给我以下错误。 下面是相关框架的源代码。
问题内容: 我有一个JTable,我需要删除一行,即选定的行。 所以首先,我得到表模型: 然后是选定的行(如果选择了第二行,则返回1,这是可以理解的,因为行从零开始): 然后,我尝试删除该行: 然后我再次设置表模型: 这实现的是删除完全随机的行。我根本不明白为什么。我已经使用table.setRowSorter(sorter)对表进行了排序,但是我不知道为什么这应该是一个问题。如果绝对需要SSCC
我是新来的希望你们能帮我。。。 我是java编程的初学者,我想我对这个问题有点不知所措。 我的程序运行得很好,除了一个让我恼火的小细节。我有一个JTable,第一列有一个按钮,可以从表中删除这一行。它工作得很好,除了当我试图删除表的最后一行时,按钮停留在那里,然后表冻结,我无法删除任何行,因为我收到了一个“越界异常”。但是,当我使用命令表时。getRowCount()); 在删除该行之前和之后,表
我的Jtable有一个listSelectionListener: 我创建了一个按钮来删除带有事件的Jtable的所有行: 如果我在没有选择任何行的情况下按下按钮,则不会出现错误,但当我选择一行,然后按下按钮时,会出现以下错误: 当表没有ListSseltionListener时,不会发生这种情况。我哪里错了? 提前感谢您的帮助。