1
タイトルが十分説明できない場合は、ごめんなさい。セルの選択中にセルの背景と10進表記を一緒に設定する方法
私は、cellBackgourd、cellForeground、Alignment、およびDecimalコントロールを指定するために、JavaのDefaultTableRendererクラスに小さな拡張を書きました。私はこのクラスを使ってJIDEテーブルを制御しカスタマイズしています。しかし、返答の可能性や回避策を増やすために、Javaで問題を再作成しました。
表が初期化されて表示されるときに、必要に応じてセルの背景、前景、位置合わせ、および小数点を正しく設定できました。しかし、行/セルを選択するとすぐに、以下の図に示すように、表示されたデータの小数点制御が緩やかになります。特定のセル選択色を使用していることに注意してください。正しく実装されていません。
私は、問題は最後の2行の一つだと思い:
return super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
または
return cell;
Javaコード:
import java.awt.*;
import java.text.DecimalFormat;
import javax.swing.*;
import javax.swing.table.*;
public class DecimalPlacesInTable extends JFrame {
public static void main(String[] args) {
DecimalPlacesInTable frame = new DecimalPlacesInTable();
frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
public DecimalPlacesInTable() {
Object[] columnNames = { "A", "B", "C" };
Object[][] data = {
{new Double(850.503), new Double(850.545), new Double(80.54553) },
{new Double(50.52503), new Double(36.4554), new Double(50.41453) },
{new Double(80.544653), new Double(8.3), new Double(80.4553) },
{new Double(50.1553), new Double(246.0943), new Double(50.455) }};
JTable table = new JTable(data, columnNames);
// Tell the table what to use to render our column of doubles
for (int i=0; i<3; i++) {
table.getColumnModel().getColumn(i).setCellRenderer(new DecimalFormatRenderer());
getContentPane().add(new JScrollPane(table));
}
}
// Custom Renderer class
static class DecimalFormatRenderer extends DefaultTableCellRenderer
{
public Component getTableCellRendererComponent
(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
JComponent cell = (JComponent) super.getTableCellRendererComponent
(table, value, isSelected, hasFocus, row, column);
// set color
cell.setBackground(new Color(0xC8C8C8));
cell.setForeground(new Color(0xFFFFFF));
//set Alignment
((JLabel) cell).setHorizontalAlignment(SwingConstants.CENTER);
//set selection colors
if (isSelected) {
cell.setBackground(new Color(0x3399FF));
cell.setForeground(new Color(0x000000)); // AM
} else {
// set decimals
DecimalFormat DecimalFormatter = new DecimalFormat("#.00");
value = DecimalFormatter.format(value);
return super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
}
return cell;
}
}
}
おかげAterai。私が作った間違いははっきりしています。 – Amit