이 경우 사용자 지정 렌더러를 만들지 않습니다. 예, 모든 데이터가 동일한 유형 인 경우 작동합니다. 그러나 모든 렌더러를 사용하는 날짜 및 정수 및 부울 값과 함께 문자열을 혼합하기 시작하면 어떻게됩니까? 그런 다음 4 개의 사용자 정의 렌더러를 만들어야합니다.
더 나은 방법은 prepareRenderer (...) 메소드 JTable을 오버라이드하여 한 곳에서 코드를 추가 할 수 있도록하는 것입니다. 다음은 시작하기위한 예제입니다. 실제로는 위쪽/아래쪽에 MatteBorder가 포함 된 CompoundBorder를 사용하고 왼쪽/오른쪽에 EmptyBorder를 사용하면 Border의 단일 인스턴스를 만들 수 있습니다. 갈 수있는 가장 좋은 방법은 prepareRendere 메소드를 오버라이드 (override)하는 것입니다 camickr
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);
}
}
일을하지만 난 –
감사합니다, 올바른 방향으로 절 지적 :) 투표를 밖으로 해요 : 다음 코드는 선택된 셀과 행의 테두리를 만들 것입니다. 나중에 참조 할 수 있도록보다 완벽한 대답으로 내 질문을 편집하겠습니다. –