我有一个JTable,其中我希望单元格的行为方式表示单元格可编辑时的行为方式,但单元格不能编辑,其他术语只读。所以如果我双击单元格,我应该只能选择单元格内的文本并从该单元格复制文本。如何使一个单元格的行为像它的可编辑但它只读?
2
A
回答
5
是能够防止用户做任何改变?
您将需要使用自定义编辑:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;
import javax.swing.text.*;
public class TableCopyEditor extends JPanel
{
public TableCopyEditor()
{
String[] columnNames = {"Editable", "Non Editable"};
Object[][] data =
{
{"1", "one"},
{"2", "two"},
{"3", "three"}
};
JTable table = new JTable(data, columnNames);
table.setPreferredScrollableViewportSize(table.getPreferredSize());
JScrollPane scrollPane = new JScrollPane(table);
add(scrollPane);
// Create a non-editable editor, but still allow text selection
Caret caret = new DefaultCaret()
{
public void focusGained(FocusEvent e)
{
setVisible(true);
setSelectionVisible(true);
}
};
caret.setBlinkRate(UIManager.getInt("TextField.caretBlinkRate"));
JTextField textField = new JTextField();
textField.setEditable(false);
textField.setCaret(caret);
textField.setBorder(new LineBorder(Color.BLACK));
DefaultCellEditor dce = new DefaultCellEditor(textField);
table.getColumnModel().getColumn(1).setCellEditor(dce);
}
private static void createAndShowUI()
{
JFrame frame = new JFrame("Table Copy Editor");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new TableCopyEditor());
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
public static void main(String[] args)
{
EventQueue.invokeLater(new Runnable()
{
public void run()
{
createAndShowUI();
}
});
}
}
2
您必须覆盖模型上的setValue()
,其中有一个空的实现和isCellEditable()
。
@Override
public void setValueAt(Object oValue, int row, int nColumn)
{
}
@Override
public boolean isCellEditable(int rowIndex, int columnIndex)
{
return true;
}
的isCellEditable
告诉这让细胞输入表,如果用户输入一些数据setValue
被调用。由于您用空实现覆盖函数,所以cellwill将恢复为现有值。
+0
感谢那些工作!虽然这些更改没有保留,是否有可能阻止用户进行任何更改? – samwell
+0
使用此解决方案,所做的更改将在视觉上进行,但只是暂时性的。他们不会接受桌子的模特。 – splungebob
1
如果在表上启用了单元格选择,则默认情况下可以从选定单元格中复制/粘贴。
这里有一个演示只读JTable中对小区选择和一个JTextField粘贴到:
import java.awt.*;
import javax.swing.*;
import javax.swing.table.*;
public class TableCellSelectionDemo implements Runnable
{
public static void main(String[] args)
{
SwingUtilities.invokeLater(new TableCellSelectionDemo());
}
public void run()
{
String[] columnNames = {"First", "Last"};
Object[][] data =
{
{"Barney", "Rubble"},
{"Fred", "Flintstone"}
};
DefaultTableModel model = new DefaultTableModel(data, columnNames)
{
@Override
public boolean isCellEditable(int row, int column)
{
return false;
}
};
JTable table = new JTable(model);
table.setCellSelectionEnabled(true);
table.setPreferredScrollableViewportSize(table.getPreferredSize());
JScrollPane scroll = new JScrollPane(table);
scroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
scroll.setHorizontalScrollBarPolicy(
JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
JTextField text = new JTextField(40);
JFrame frame = new JFrame("Demo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(scroll, BorderLayout.CENTER);
frame.getContentPane().add(text, BorderLayout.SOUTH);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}
相关问题
- 1. 单个“可编辑数据网格”单元显示为只读;我如何让它们实际可编辑?
- 2. jquery datatables可编辑如何使编辑后的单元格'只读'?
- 3. 禁用单元格编辑或使单元格只读
- 4. 如何使单元格不可编辑基于gxt中可编辑网格中的另一个单元格值
- 5. Django - 如何才能在管理界面中的表格中的单元格可编辑只有它为空?
- 6. 使JTable单元格编辑器值可选,但不可编辑?
- 7. 如何在编辑时使单元格只读?
- 8. 我们可以只读单元格中的单元格编辑器
- 9. EXtjs 3.2:如何将特定单元格设置为不可编辑或只读?
- 10. Devexpress Treelist中的单元格设置为可编辑但它不会让我编辑
- 11. 如何使一个可编辑的textView进入一个单元格,但我们可以滚动一个datagridview?
- 12. 在jqGrid中切换单元格只读/可编辑
- 13. Devexpress TreeList - 如何删除单元格中的值当它设置为只读
- 14. jqGrid:使用单元格编辑编辑多个单元格
- 15. 如何使列可编辑或只读?
- 16. jqgrid:根据表单编辑中的单元格值将可编辑单元格更改为不可编辑
- 17. 在DataGridView中编辑整行(不只是一个单元格)
- 18. 使每个单元格不可编辑时JTable行可选
- 19. EXTJS 4 - 如何通过网格使用Tab键时跳过单个单元格,但保持标签按下开始编辑下一个可编辑单元格?
- 20. Jquery可编辑表格:我如何使某些单元格可编辑?
- 21. 如何使EditText只读但不可编辑
- 22. GWT Celltable如何使可编辑列中的非可编辑单元格
- 23. 如何用Jtable中行中的第一个单元格的单元格编辑器编辑一行中的所有单元格?
- 24. GWT:我如何为CellTable中的可编辑表格单元分配一个ID?
- 25. jQuery:jqGrid - 创建一个可以编辑单元格的表格
- 26. 只编辑UITableView中的第一个单元格
- 27. 编辑一个HTML表格单元格
- 28. 具有相同自定义模型的两个JXTables - 如何使单元格在一个表格中可编辑,但在第二个表格中不可编辑?
- 29. SQL pivoted table是只读的,单元格不能被编辑?
- 30. 如何使结果单元格只读?
+1这效果很好。它甚至允许部分选择...不像我的解决方案;-( – splungebob
+1都是...... – mKorbel
是的,多一点工作,但你有更大的灵活性 – camickr