JavaのJTableのセル単体の色設定
今日は
JavaのJtableの『マウスで選択したセル』の色を赤色に設定するコードを書きましたが、セル単体でバックグランドの色が変更できまず、行単位で変更されます。
又、変更のタイミングは、他のセルを、マウス選択したときに、以前のセルの行が赤く変更になります。
Q1)セル単体で、バックグランドの変更を行い、その変更タイミングは、クリックと同時に
行う様に改善したく質問いたします。
注)Java暦は、初心者で約2週間ですが。下記にソースを添付いたしますので、宜しくお願いいたします。
//==============================
package packageA;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.event.MouseEvent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
public class JTableTest2 extends JFrame{
public static void main(String[] args){
JTableTest2 test = new JTableTest2("T");
test.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
test.setVisible(true);
}
JTableTest2(String name){
setBounds( 0, 0, 400, 200);
setTitle(name);
String d[][] = {
{"A","8","7"},
{"B","6","5"},
{"C","7","6"}
};
String t[] = {"名","数","英"};
DefaultTableModel tm = new DefaultTableModel(d,t);
final JTable tablex = new JTable(tm);
/* final JTable tablex = new JTable(tm){
@Override
public Component prepareRenderer(TableCellRenderer tcr, int row, int column) {
Component c = super.prepareRenderer(tcr, row, column);
if (row == 2 && column == 2) {
c.setForeground(Color.BLUE);
c.setBackground(Color.RED);
} else {
c.setForeground(getForeground());
c.setBackground(getBackground());
}
return c;
}
};
*/
tablex.addMouseListener(
new java.awt.event.MouseAdapter() {
public void mousePressed(MouseEvent e) {
int row=tablex.getSelectedRow();
int col=tablex.getSelectedColumn();
// TableCellRenderer tcr = tablex.getCellRenderer(row,col);
// Component c = tablex.prepareRenderer(tcr,row,col);
Component c = tablex.getComponentAt(row,col);
c.setForeground(Color.BLUE);
c.setBackground(Color.RED);
System.out.println(" "+row+" "+col);
}
}
);
JPanel p1 = new JPanel();
JScrollPane sp1 = new JScrollPane(tablex);
sp1.setPreferredSize(new Dimension(250, 80));
p1.add(sp1);
getContentPane().add(p1, BorderLayout.NORTH);
}
}
お礼
回答ありがとうございます。 なるほど、そのような方法があったんですね。 先ほどDefaultTableModelのオーバーライドしで試したところ、表題の問題が解決しました。 大変助かりました、ありがとうございました。