JTable の特定のセルの背景色を取得する方法の例を教えてもらえますか? これを行う方法の例が見つかりません。セルの値を取得する例はたくさんありますが、セルの背景色はありません。
質問する
11303 次
4 に答える
7
次のようなものにする必要があります(すべてのコメントに従って修正されています)。
重要: table.prepareRenderer(...) を使用して、JTable にすべての作業を任せます
public Color getTableCellBackground(JTable table, int row, int col) {
TableCellRenderer renderer = table.getCellRenderer(row, col);
Component component = table.prepareRenderer(renderer, row, col);
return component.getBackground();
}
完全なデモ:
public class TableRenderDemo extends JPanel {
public TableRenderDemo() {
super(new GridLayout(1, 0));
final JTable table = new JTable(new MyTableModel());
table.setPreferredScrollableViewportSize(new Dimension(600, 200));
table.setFillsViewportHeight(true);
table.setDefaultRenderer(Object.class, new MyRenderer());
table.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
int row = table.getSelectedRow();
int col = table.getSelectedColumn();
JOptionPane.showInternalMessageDialog(TableRenderDemo.this,
"Color: " + getTableCellBackground(table, row, col));
System.out.println("Color: " + getTableCellBackground(table, row, col));
}
});
JScrollPane scrollPane = new JScrollPane(table);
add(scrollPane);
}
public Color getTableCellBackground(JTable table, int row, int col) {
TableCellRenderer renderer = table.getCellRenderer(row, col);
Component component = table.prepareRenderer(renderer, row, col);
return component.getBackground();
}
class MyRenderer implements TableCellRenderer {
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,
boolean hasFocus, int row, int column) {
JTextField editor = new JTextField();
if (value != null) {
editor.setText(value.toString());
}
editor.setBackground((row % 2 == 0) ? Color.white : Color.BLUE);
return editor;
}
}
class MyTableModel extends AbstractTableModel {
private String[] columnNames = {"First Name",
"Last Name",
"Sport",
"# of Years",
"Vegetarian"};
private Object[][] data = {
{"Kathy", "Smith",
"Snowboarding", new Integer(5), new Boolean(false)},
{"John", "Doe",
"Rowing", new Integer(3), new Boolean(true)},
{"Sue", "Black",
"Knitting", new Integer(2), new Boolean(false)},
{"Jane", "White",
"Speed reading", new Integer(20), new Boolean(true)},
{"Joe", "Brown",
"Pool", new Integer(10), new Boolean(false)}
};
public final Object[] longValues = {"Jane", "Kathy",
"None of the above",
new Integer(20), Boolean.TRUE};
public int getColumnCount() {
return columnNames.length;
}
public int getRowCount() {
return data.length;
}
public String getColumnName(int col) {
return columnNames[col];
}
public Object getValueAt(int row, int col) {
return data[row][col];
}
}
private static void createAndShowGUI() {
JFrame frame = new JFrame("TableRenderDemo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
TableRenderDemo newContentPane = new TableRenderDemo();
newContentPane.setOpaque(true); //content panes must be opaque
frame.setContentPane(newContentPane);
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}
}
于 2012-10-12T15:54:50.403 に答える
1
JTable の特定のセルの背景色を取得する方法の例を教えてもらえますか? これを行う方法の例が見つかりません。
TableCellRendererまたはRendererの場合、
ただし、すべてはJTable チュートリアルに基づいており、特にエディターとレンダラーおよびカスタム レンダラーの一部です。
セルの値を取得する例はたくさんありますが、セルの背景色はありません。
私は抵抗できません、このフォーラムまたはどこでお願いします
お役に立てば幸いです....
于 2012-10-12T15:35:33.043 に答える
1
JTable
セルの色を取得する0, 0
には、セル コンポーネントの背景色を取得できます。
TableCellRenderer cellRenderer = table.getCellRenderer(0, 0);
Component rendererComponent = cellRenderer.getTableCellRendererComponent(table, null, false, true, 0, 0);
Color cellColor = rendererComponent.getBackground();
于 2012-10-12T15:50:57.297 に答える
0
TableCellRenderer を使用する
jTable1 = new javax.swing.JTable(6,6){
public Component prepareRenderer(
TableCellRenderer renderer, int row, int column)
{
Component c = super.prepareRenderer(renderer, row, column);
if(column==2 && row==4)
{
Color color= c.getBackground();// use setBackground to set color and get background to get background of a particular cell
System.out.println("Color of row=0 and column=0 is "+color);
}
else
{
c.setBackground(Color.GREEN);
setShowGrid(true);
}
return c;
}
};
于 2012-10-13T18:35:01.113 に答える