gpt4 book ai didi

java - 如何为 Jtable 中的行添加边框?

转载 作者:行者123 更新时间:2023-12-02 13:56:13 24 4
gpt4 key购买 nike

我有一个 Jtable,我想通过向行添加边框来突出显示该行。我扩展了一个 DefaultTableCellRenderer,并且我认为工作需要在 getTableCellRendererComponent 方法中完成。

我猜测,由于似乎没有行的概念,因此我需要为行中的各个单元格创建自定义边框。例如第一个单元格的左侧、顶部和底部,所有内部单元格的顶部和底部,以及行中最后一个单元格的顶部、底部和右侧。我在寻找如何实际执行思考过程时遇到问题。我不确定如何使用 setBorder() 方法,或者这是否是我需要采取的方向。

最佳答案

我不会为此创建自定义渲染器。是的,如果您的所有数据都属于同一类型,它就会起作用。但是,当您开始混合使用不同渲染器的字符串、日期、整数和 boolean 值时会发生什么?然后您需要创建 4 个自定义渲染器。

更好的方法是重写 JTable 的prepareRenderer(...) 方法,以便您可以将代码添加到一个位置。这是一个帮助您入门的示例。实际上,您可能希望使用包含顶部/底部 MatteBorder 和左侧/右侧 EmptyBorder 的CompoundBorder,并且您将创建一个 Border 实例。

import java.awt.*;
import java.util.*;
import javax.swing.*;
import javax.swing.table.*;
import javax.swing.text.*;
import javax.swing.border.*;

public class TablePrepareRenderer extends JFrame
{
JTable table;

public TablePrepareRenderer()
{
Object[] columnNames = {"Type", "Company", "Shares", "Price", "Boolean"};
Object[][] data =
{
{"Buy", "IBM", new Double(1000), new Double(80.5), Boolean.TRUE},
{"Sell", "MicroSoft", new Double(2000), new Double(6.25), Boolean.TRUE},
{"RSell", "Apple", new Double(3000), new Double(7.35), Boolean.TRUE},
{"Buy", "Nortel", new Double(4000), new Double(20), Boolean.TRUE}
};

DefaultTableModel model = new DefaultTableModel(data, columnNames);
table = new JTable( model )
{
// Returning the Class of each column will allow different
// renderers to be used based on Class

public Class getColumnClass(int column)
{
return getValueAt(0, column).getClass();
}

public Component prepareRenderer(
TableCellRenderer renderer, int row, int column)
{
Component c = super.prepareRenderer(renderer, row, column);
JComponent jc = (JComponent)c;

// Color row based on a cell value
// Alternate row color

if (!isRowSelected(row))
c.setBackground(row % 2 == 0 ? getBackground() : Color.LIGHT_GRAY);
else
jc.setBorder(new MatteBorder(1, 0, 1, 0, Color.RED) );


// Use bold font on selected row

return c;
}
};

table.setPreferredScrollableViewportSize(table.getPreferredSize());
table.changeSelection(0, 0, false, false);
JScrollPane scrollPane = new JScrollPane( table );
getContentPane().add( scrollPane );
}

public static void main(String[] args)
{
TablePrepareRenderer frame = new TablePrepareRenderer();
frame.setDefaultCloseOperation( EXIT_ON_CLOSE );
frame.pack();
frame.setLocationRelativeTo( null );
frame.setVisible(true);
}
}

关于java - 如何为 Jtable 中的行添加边框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1772764/

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