我找到了在点击JTable标题时选择特定列的代码。对于我的模块,如果有人选择一个JTable单元格,则必须删除之前选择的所有列。我成功地更改了表。setColumnSelectionAllowed(真)
或
表格。setRowSelectionAllowed(假)
或者在单元格编辑器中。
现在
我无法恢复默认选择的前景色和背景色
一旦在单元格选择后选择了表头,则无法清除上一个表格单元格选择
头ocation.java
public class HeaderLocation {
private JTable getTable() {
int rows = 32, cols = 4;
String[] colIds = { "column 1", "column 2", "column 3", "column 4" };
Object[][] data = new Object[rows][cols];
for(int row = 0; row < rows; row++) {
for(int col = 0; col < cols; col++) {
data[row][col] = "item " + (row*cols+col+1);
}
}
DefaultTableModel model = new DefaultTableModel(data, colIds);
final JTable table = new JTable(model);
final JTableHeader header = table.getTableHeader();
Enumeration<TableColumn> columns = table.getColumnModel().getColumns();
while(columns.hasMoreElements()){
columns.nextElement().setCellEditor(new CustomCellEditor());
}
//table.setCellEditor(new CustomCellEditor());
header.setReorderingAllowed(false);
header.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
int col = header.columnAtPoint(e.getPoint());
System.out.printf("click cursor = %d%n",
header.getCursor().getType());
if(header.getCursor().getType() == Cursor.E_RESIZE_CURSOR)
e.consume();
else {
//System.out.printf("sorting column %d%n", col);
table.setColumnSelectionAllowed(true);
table.setRowSelectionAllowed(false);
table.clearSelection();
table.setColumnSelectionInterval(col,col);
//tableModel[selectedTab].sortArrayList(col);
}
}
});
return table;
}
private JMenuBar getMenuBar() {
final JMenu view = new JMenu("view");
ActionListener l = new ActionListener() {
public void actionPerformed(ActionEvent e) {
JMenuItem item = (JMenuItem)e.getSource();
String className = item.getActionCommand();
changePLAF(className, view.getTopLevelAncestor());
}
};
UIManager.LookAndFeelInfo[] info = UIManager.getInstalledLookAndFeels();
for(int j = 0; j < info.length; j++) {
JMenuItem item = new JMenuItem(info[j].getName());
item.setActionCommand(info[j].getClassName());
item.addActionListener(l);
view.add(item);
}
JMenuBar menuBar = new JMenuBar();
menuBar.add(view);
return menuBar;
}
private void changePLAF(String className, Component c) {
try {
UIManager.setLookAndFeel(className);
} catch(ClassNotFoundException cnfe) {
System.err.println("class not found: " + cnfe.getMessage());
} catch(InstantiationException ie) {
System.err.println("instantiation: " + ie.getMessage());
} catch(IllegalAccessException iae) {
System.err.println("illegal access: " + iae.getMessage());
} catch(UnsupportedLookAndFeelException ulafe) {
System.err.println("unsupported laf: " + ulafe.getMessage());
}
SwingUtilities.updateComponentTreeUI(c);
}
public static void main(String[] args) {
HeaderLocation test = new HeaderLocation();
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setJMenuBar(test.getMenuBar());
f.getContentPane().add(new JScrollPane(test.getTable()));
f.pack();
f.setLocation(200,200);
f.setVisible(true);
}
}
CustomCellEditor.java
public class CustomCellEditor extends AbstractCellEditor implements TableCellEditor{
private JComponent component = new JLabel();
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
System.out.println(row + "," + column);
//if(getClickCountToStart() == 2)
//{
try{
table.clearSelection();
table.setColumnSelectionAllowed(false);
table.setRowSelectionAllowed(false);
}
catch(Exception e)
{
System.out.println("Exception::->" + e.getMessage());
}
//}
// Configure the component with the specified value
component.setOpaque(isSelected);
((JLabel)component).setText((String)value);
component.setForeground(table.getSelectionForeground());
component.setBackground(table.getSelectionBackground());
component.setEnabled(false);
// Return the configured component
return component;
}
@Override
public Object getCellEditorValue() {
// TODO Auto-generated method stub
return ((JLabel)component).getText();
}
}
我真的非常感谢与此相关的任何帮助。
谢谢克利奥帕特拉。我刚刚为桌上鼠标侦听器添加了如下代码:-
table.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
//System.out.printf("sorting column %d%n", col);
table.setColumnSelectionAllowed(false);
table.setRowSelectionAllowed(false);
table.setCellSelectionEnabled(true);
//tableModel[selectedTab].sortArrayList(col);
}
});
这将解决问题。刚刚删除了所有的单元格编辑器代码。有一个初始的列选择,但效果很好。
new JTable( model )
{
public Component prepareRenderer(TableCellRenderer renderer, int row, int column)
{
Component c = super.prepareRenderer(renderer, row, column);
// Color row based on a cell value
if (isRowSelected(row)){ //When A row is selected
c.setBackground(getBackground());//Set Background
c.setForeground(color.RED);
}
return c;
}
// Use if(!isRowSelected(row)){} if want to change non-selected row color or background
}
问题内容: 我正在尝试使用渲染器为jTable的单元格上色,但是它们工作不佳,因为它们滞后于表格并且无法看到。这是我的代码: 我没有将其放入rendererclass中,因为它滞后了,我将其放入cicle的双精度中,具体地说,放入了第二个cicle。我希望它为超过24的单元格上色,如果现在我写的话,那是行不通的 它使桌子完全着色 编辑 按照要求,我创建了一个描述我的问题的小示例,我不知道是否存在发
我有一个Table,我使用我自己的自定义LabelProvider来显示背景和前景颜色。 由此我得出,我无法更改选择的背景色。因此,我想能够改变前景色的文字选择后。但是,我不知道如何检测是否选择了特定的行,以便提供不同的前景色。 任何帮助将不胜感激,我不太精通swt。 编辑:对于任何搜索这是我所做的
问题内容: 我正在使用Vaadin,我想为我的表格/表格中的特定单元格设置背景色,或者如果无法为特定表格中的单元格设置背景色,我想至少为表格/表格中的特定单元格设置字体颜色。我有一个表格/表格的代码TableView如下: 表格/表格的内容类为: 如果可以将背景颜色设置为特定的单元格,或者至少设置字体颜色,并且您知道该怎么做,请写信。例如,在表格/表格中单元格的值为“ 1”的情况下,我想将其设置为
问题内容: 我想更改tkinter.treeview中选定单元格的前景色或背景色。我怎样才能做到这一点? 此链接显示了更改树视图中所有单元格颜色的命令,但我无法在单个单元格中使用它。 我以前写过一个测试代码。请使用此代码得出您的解决方案/建议。谢谢。 该链接显示了如何使用标记来更改数据行(即所选项目)而不是单元格的颜色。 问题答案: @BryanOkley分享到,不能更改ttk.Treeview中
我想改变JTable的单元格背景颜色,想从MySQL数据库中获取数据。 我在MySQL中使用一个数据表,它有一个状态字段。如果状态为1,则单元格背景颜色应为红色;如果状态为0,则应更改为红色。
我有一个简单的word文档,其中有一个表,包含一行和两列(换句话说,两个单元格)。第一个单元格的背景色是红色,另一个是黑色。我想使用python-docx将两者都改为白色。 我已经尝试了几种方法,但似乎最有希望的是下面的方法。它修改基础XML。 上面的代码将第一个单元格修改为白色,而将第二个单元格保留为黑色。我试图修改第二个单元格,方法是在之前添加以下代码: 问题是,现在,第一个单元格仍然是红色的