JTable 행의 색상을 변경하고 싶습니다.JTable 행에 색상 추가
내가 JTable에서 행을 설정할 때 첫 번째 행은 빨간색으로 변합니다. 그리고 나서 새 행을 추가하려면 첫 번째 행이 노란색이되고 두 번째 행은 빨간색이됩니다.
내가 다시 그리기를 사용하지 않는() 렸기 때문에 모든 시간 일하러 내가 다시 칠하거나 tablemodel.setfile 사용이거든요 한 ... 테이블이 지속적으로
JTable 행의 색상을 변경하고 싶습니다.JTable 행에 색상 추가
내가 JTable에서 행을 설정할 때 첫 번째 행은 빨간색으로 변합니다. 그리고 나서 새 행을 추가하려면 첫 번째 행이 노란색이되고 두 번째 행은 빨간색이됩니다.
내가 다시 그리기를 사용하지 않는() 렸기 때문에 모든 시간 일하러 내가 다시 칠하거나 tablemodel.setfile 사용이거든요 한 ... 테이블이 지속적으로
이 업데이트 원하는 칠 custom cell renderer으로 할 수 있습니다.
셀 렌더러는 실제로 셀이 표시하는 구성 요소를 생성합니다. (셀 렌더러 Component는 실제로 이 아니고 JTable에이 추가되었습니다 .JTable은 페인팅을하기 위해 JTable을 사용하기 만합니다.) DefaultTableCellRenderer
은 JLabels을 만들어서 배경색과 전경색을 자유롭게 설정할 수 있습니다. 페인팅을 할 필요가 없습니다.
당신은 거의 당신이 원하는 그러나 세포를 표시 할 수 있습니다. 내가 어떻게 추측했는지 두 줄을 바라 보았는지 확실하지 않았습니다.
import javax.swing.*;
import javax.swing.table.*;
import java.awt.*;
import java.awt.event.*;
public class CustomCellRenderer implements Runnable, ActionListener {
public static void main(String[] args) {
SwingUtilities.invokeLater(new CustomCellRenderer());
}
JTable table;
@Override
public void run() {
JFrame frame = new JFrame("Custom Cell Renderer");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
table = new JTable(new DefaultTableModel(0, 2) {
@Override
public Class<?> getColumnClass(int c) {
return Object.class;
}
});
class RedYellowRenderer extends DefaultTableCellRenderer {
RedYellowRenderer() {
setHorizontalAlignment(CENTER);
}
@Override
public Component getTableCellRendererComponent(
JTable table, Object value,
boolean isSelected, boolean hasFocus,
int row, int column
) {
Component c = super.getTableCellRendererComponent(
table, value, isSelected, hasFocus, row, column
);
if(row == 0 && table.getRowCount() > 1) {
c.setBackground(Color.YELLOW);
c.setForeground(Color.BLACK);
} else {
c.setBackground(Color.RED);
c.setForeground(Color.WHITE);
}
return c;
}
}
table.setDefaultRenderer(Object.class, new RedYellowRenderer());
table.setTableHeader(null);
JButton btn = new JButton("Add Row");
btn.addActionListener(this);
JToolBar bar = new JToolBar();
bar.setFloatable(false);
bar.add(btn);
JPanel content = new JPanel(new BorderLayout());
content.add(bar, BorderLayout.NORTH);
content.add(new JScrollPane(table), BorderLayout.CENTER);
frame.setContentPane(content);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent ae) {
int nextRow = table.getRowCount();
DefaultTableModel model = (DefaultTableModel)table.getModel();
model.addRow(new Object[] { "NAME" + nextRow, "SPORT" + nextRow });
}
}