MyTableCellEditor的目的是使JTable单元的行为类似于Excel单元格IOW,单击单元格后输入一个值,而不是附加到现有值.我没想到下面的代码会在第一次传递时工作,但我确实希望在getTableCellEditorComponent和getCellEditorValue中遇到调试断点.当我使用jTable时,为什么不调用getTableCellEditorComponent或getCellEditorValue?
public class MyTable extends javax.swing.JFrame implements TableModelListener {
private static final MyTableCellEditor tableCellEditor =
new MyTableCellEditor();
...
public MyTable() {
initComponents();
jTable.getModel().addTableModelListener(MyTable.this);
...
private void initComponents() { // Generated by the Form Editor.
jTable = new javax.swing.JTable();
jTable.setCellEditor(tableCellEditor);
...
public class MyTableCellEditor extends AbstractCellEditor implements
TableCellEditor {
JComponent component = new JTextField();
public Component getTableCellEditorComponent(JTable table, Object value,
boolean isSelected, int rowIndex, int vColIndex) {
if (isSelected) {
((JTextField)component).selectAll();
}
((JTextField)component).setText((String)value);
return component;
}
public Object getCellEditorValue() {
return …Run Code Online (Sandbox Code Playgroud) 我有一张桌子.对该表更新数据库的更改.一列由该表中的JComboBox编辑.单击该列中的任何单元格将触发tableChanged事件.但是,在选择JComboBox的项目后需要触发它.如何在选择后使tableChanged出现?
public class JIDCellEditor extends AbstractCellEditor implements TableCellEditor {
JComboBox jComboBox;
@Override
public Object getCellEditorValue() {
return jComboBox.getSelectedItem();
}
@Override
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
Vector vector = new Vector();
vector.add(0);
for (int i = 0; i < table.getRowCount(); i++) {
if (!vector.contains(table.getValueAt(i, 0)) && table.getValueAt(i, 3).toString().equals("Female")) {
vector.add(table.getValueAt(i, 0));
}
}
vector.remove(table.getValueAt(row, 0));
jComboBox = new JComboBox(vector);
jComboBox.setSelectedItem(value);
return jComboBox;
}
}
Run Code Online (Sandbox Code Playgroud) java - 我想要一个JTable单元格/列,只允许我输入一位数字(如1到9).我怎样才能做到这一点?
我试过这个,但我按下的数字在单元格中出现了两次.
table.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent e) {
System.out.println("pressed..."+e.getKeyChar());
char key = e.getKeyChar();
int selectedColumn = table.getSelectedColumn();
int selectedRow = table.getSelectedRow();
if(table.getValueAt(selectedRow, selectedColumn) == null)
table.setValueAt(key, selectedRow, selectedColumn);
}
});
Run Code Online (Sandbox Code Playgroud) 我有一个Jtable,我在其中添加了JComobox.
TableColumn sportColumn = jTable1.getColumnModel().getColumn(2);
comboBox = new JComboBox();
comboBox.addItem("Snowboarding");
comboBox.addItem("Rowing");
comboBox.addItem("Chasing toddlers");
comboBox.addItem("Speed reading");
comboBox.addItem("Teaching high school");
comboBox.addItem("None");
sportColumn.setCellEditor(new DefaultCellEditor(comboBox));
Run Code Online (Sandbox Code Playgroud)
我添加了一个像这样的jtable鼠标事件.
private void jTable1MouseClicked(java.awt.event.MouseEvent evt) {
// TODO add your handling code here:
try {
int row = jTable1.rowAtPoint(evt.getPoint());
int col = jTable1.columnAtPoint(evt.getPoint());
System.out.println("Row" + row + "Column" + col);
} catch (Exception e) {
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
我正在把行和列放到正确的位置.
但当我点击我添加Jcombobox的单元格时,它没有给出该行和列的放置.仍然我在组合框点击事件中调用了表格的clickevent但是它给了所有时间第0行甚至第0列这里的屏幕截图.

所以我怎么解决它所以我可以有那个行和列?
我想验证表格单元格中的用户输入,并且我使用 Nimbus 外观和感觉。以下是验证整数输入的单元格编辑器的代码:WholeNumberField
它扩展JTextField并添加了输入验证。
当我为列设置它时,它工作正常,但无法容纳文本:

当我使用默认单元格编辑器时,一切看起来都很好:

这个编辑器如何看起来像默认编辑器?
如果用户使用键盘开始按键,那么JTable应该为他搜索匹配的文本,如果用户双击单元格,那么Table应该允许他编辑文本.
问题是 - 表只是在表处于不可编辑模式时搜索文本,并且如果表是可编辑的并且用户开始键入文本使用键盘,则单元格允许他编辑单元格而不是搜索.mKorbel先生刚刚解决了我的问题,只有双击Table cell才允许编辑.
请帮我允许我JTable搜索文本,即使表格在按键上处于可编辑模式.
我正在使用JProgressBar来显示进度.但是,如何将progressBar显示为从0加载到100?我从互联网及其工作中获得了代码,但progressBar没有加载.
码
progressFrame = new JFrame(); // frame to display progress bar
progressBar = new JProgressBar(0,100);
progressBar.setValue(0);
progressBar.setStringPainted(true);
progressFrame.add(progressBar);
new SwingWorker<Void,Void>()
{
protected Void doInBackground() throws SQLException, ClassNotFoundException
{
Class.forName("oracle.jdbc.driver.OracleDriver");
progressBar.setValue(0);
frame.setEnabled(false); // frame = main frame
//tableclass creates a JTable with data from database
tableclass = new TheDatabaseTable(deptName);//it takes time to create
progressBar.setValue(50);
frame.getContentPane().removeAll();
frame.setContentPane(tableclass);
frame.validate();
frame.repaint();
progressBar.setValue(100);
//progressFrame.dispose();
return null;
};
protected void done()
{
//progressFrame.setVisible(false);
frame.setVisible(true);
progressFrame.dispose();
frame.setEnabled(true);
}
}.execute();
Run Code Online (Sandbox Code Playgroud)
如果有人编辑上述代码,我将不胜感激.谢谢.
我已经在 JTable 中设置了默认字体,如下所示
myTable.setFont(new java.awt.Font("Verdana", 1, 10));
Run Code Online (Sandbox Code Playgroud)
我想在我的 JTable 中显示更大的字体,同时将一些数据输入到单元格中。所以我使用了MyTableCellEditor自定义类。
public class MyTableCellEditor extends AbstractCellEditor implements TableCellEditor {
JComponent component = new JTextField();
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected,
int rowIndex, int vColIndex) {
((JTextField) component).setText((String) value);
((JTextField) component).setFont(new Font("Verdana", 1, 12));
return component;
}
public Object getCellEditorValue() {
return ((JTextField) component).getText();
}
}
Run Code Online (Sandbox Code Playgroud)
下面是我将 CustomCellEditor 附加到表格的代码。
myTable.getColumnModel().getColumn(1).setCellEditor(new MyTableCellEditor());
Run Code Online (Sandbox Code Playgroud)
但这段代码似乎不起作用。编辑时单元格字体变小,一旦我完成编辑并按回车键,我设置的默认 JTable 字体(Verdana 10)就会生效。为什么会发生这种情况?我已经将 CustomCellEditor 字体设置为( Verdana 12 )到我的单元格。
我有一个JComboBox用作编辑器的人JTable.在图片中,您可以在标有列的列中看到它们Produs.我想JComboBox在网格单元格中使用独立设计,特别是组合框的右侧部分,网格单元格中缺少三角形,因此用户将知道网格单元格是组合框而不必点击其中一个.如何将JComboBox(IsBackFlush)的设计应用于JComboBoxes网格中?
从本质上讲,我如何comboBox2根据设计进行设计comboBox1?谢谢.

我试图找到一种优雅的方法,当用户关闭主应用程序窗口时,使JTable停止单元格编辑(实际取消它).我知道可以使用WindowAdapter完成这样的事情,但为了使其正常工作,我需要对窗口的引用.问题是我有时候没有它.