netbeans IDE7.4로 작업 중이며 JTable
런타임에 행을 추가 하고 있으며 이제 특정 행의 배경색을 설정하고 싶습니다.
이제 문제는 해당 행의 값이 변경 될 때 해당 특정 행의 색상이 변경되지 않고 테이블을 위아래로 스크롤하면 변경 사항이 적용된다는 것입니다.
런타임에 테이블을 새로 고치는 방법은 무엇입니까? 런타임에 특정 행의 배경색을 설정하는 방법은 무엇입니까?
이것은 특정 행을 채색하는 데 사용하는 렌더러 클래스입니다.
public class MyCellRenderer extends javax.swing.table.DefaultTableCellRenderer
{
public java.awt.Component getTableCellRendererComponent(javax.swing.JTable table, java.lang.Object value, boolean isSelected, boolean hasFocus, int row, int column)
{
final java.awt.Component cellComponent = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
Object val=table.getValueAt(row, 2);
String sval=val.toString();
sval=sval.replaceAll(":","");
int ival=Integer.parseInt(sval);
if(ival==0)
{
cellComponent.setForeground(Color.black);
cellComponent.setBackground(Color.red);
}
else
{
cellComponent.setBackground(Color.white);
cellComponent.setForeground(Color.black);
}
if (isSelected)
{
cellComponent.setForeground(table.getSelectionForeground()); cellComponent.setBackground(table.getSelectionBackground());
}
return cellComponent;
}
}
다음과 같이 jtable에 할당하고 있습니다.
newViewTable.setDefaultRenderer(Object.class,new MyCellRenderer());
newViewTable은 JTable의 이름입니다.
어느 시점에서 어떤 방식 으로든 내용이 변경되었음을 표에 알려야합니다.
TableModel
기반을 사용하는 경우 예를 들어 이벤트를 AbstractTableModel
사용할 수 있습니다 . 그러면 모델이 변경되었음을 알리고 테이블을 다시 그립니다.fireTableXxx
fireTableCellUpdate(row, col)
JTable
fireTablesRowsUpdated
이로 인해 JTable
전체 행이 업데이트 되므로 사용을 고려할 수 있습니다 .
당신이 사용하는 경우 setValueAt
값을 변경 모델에 적절한 이벤트 트리거를 호출해야합니다 ...
실행 예제로 업데이트 됨
따라서 MyCellRenderer
렌더러를 기반 으로이 예제를 수행했는데 제대로 작동합니다.
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.table.DefaultTableModel;
public class TestTable {
public static void main(String[] args) {
new TestTable();
}
public TestTable() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
}
final DefaultTableModel model = new DefaultTableModel(
new Object[]{"A", "B", "C"},
0
);
model.addRow(new Object[]{"A", "B", "1"});
model.addRow(new Object[]{"C", "D", "0"});
model.addRow(new Object[]{"E", "F", "1"});
model.addRow(new Object[]{"G", "H", "0"});
JTable table = new JTable(model);
table.setDefaultRenderer(Object.class, new MyCellRenderer());
JButton btn = new JButton("Add");
btn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
model.addRow(new Object[]{"N", "O", (int)(Math.round(Math.random() * 1))});
}
});
JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
frame.add(new JScrollPane(table));
frame.add(btn, BorderLayout.SOUTH);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class MyCellRenderer extends javax.swing.table.DefaultTableCellRenderer {
public java.awt.Component getTableCellRendererComponent(javax.swing.JTable table, java.lang.Object value, boolean isSelected, boolean hasFocus, int row, int column) {
final java.awt.Component cellComponent = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
Object val = table.getValueAt(row, 2);
String sval = val.toString();
sval = sval.replaceAll(":", "");
int ival = Integer.parseInt(sval);
if (ival == 0) {
cellComponent.setForeground(Color.black);
cellComponent.setBackground(Color.red);
} else {
cellComponent.setBackground(Color.white);
cellComponent.setForeground(Color.black);
}
if (isSelected) {
cellComponent.setForeground(table.getSelectionForeground());
cellComponent.setBackground(table.getSelectionBackground());
}
return cellComponent;
}
}
}
이제 문제는 무엇을 다르게하고 있습니까 ??
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다