标签: tablecelleditor

Java:为什么JTable不使用TableCellEditor?

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)

java jtable tablecelleditor

3
推荐指数
1
解决办法
7956
查看次数

JComboBox作为自定义TableCellEditor

我有一张桌子.对该表更新数据库的更改.一列由该表中的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 swing jtable tablecelleditor jcombobox

3
推荐指数
1
解决办法
8669
查看次数

java - 允许我只输入单个数字的JTable单元格/列

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)

java swing jtable tablecelleditor

3
推荐指数
1
解决办法
4335
查看次数

在Jtable中添加JCombobox并在Swing java中获取该行和列

我有一个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列这里的屏幕截图.

在此输入图像描述

所以我怎么解决它所以我可以有那个行和列?

java swing jtable tablecelleditor jcombobox

3
推荐指数
1
解决办法
5678
查看次数

自定义单元格编辑器无法容纳 Nimbus 外观和感觉中的文本

我想验证表格单元格中的用户输入,并且我使用 Nimbus 外观和感觉。以下是验证整数输入的单元格编辑器的代码:WholeNumberField 它扩展JTextField并添加了输入验证。

当我为列设置它时,它工作正常,但无法容纳文本:

文字剪切

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

正常的样子

这个编辑器如何看起来像默认编辑器?

java swing jtable look-and-feel tablecelleditor

2
推荐指数
2
解决办法
739
查看次数

请帮我允许我的`JTable`搜索文本,即使表格在按键上处于可编辑模式

如果用户使用键盘开始按键,那么JTable应该为他搜索匹配的文本,如果用户双击单元格,那么Table应该允许他编辑文本.

问题是 - 表只是在表处于不可编辑模式时搜索文本,并且如果表是可编辑的并且用户开始键入文本使用键盘,则单元格允许他编辑单元格而不是搜索.mKorbel先生刚刚解决了我的问题,只有双击Table cell才允许编辑.

请帮我允许我JTable搜索文本,即使表格在按键上处于可编辑模式.

java swing jtable tablecelleditor

2
推荐指数
1
解决办法
229
查看次数

进度条Java

我正在使用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)

如果有人编辑上述代码,我将不胜感激.谢谢.

java swing jtable tablecelleditor jprogressbar

2
推荐指数
2
解决办法
3万
查看次数

编辑 JTable 单元格时更改其字体

我已经在 J​​Table 中设置了默认字体,如下所示

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 )到我的单元格。

java fonts swing jtable tablecelleditor

2
推荐指数
1
解决办法
3632
查看次数

如何使JComboBox表编辑器具有普通JComboBox的设计?

我有一个JComboBox用作编辑器的人JTable.在图片中,您可以在标有列的列中看到它们Produs.我想JComboBox在网格单元格中使用独立设计,特别是组合框的右侧部分,网格单元格中缺少三角形,因此用户将知道网格单元格是组合框而不必点击其中一个.如何将JComboBox(IsBackFlush)的设计应用于JComboBoxes网格中?

从本质上讲,我如何comboBox2根据设计进行设计comboBox1?谢谢.

裁剪图像

java swing jtable tablecelleditor jcombobox

2
推荐指数
1
解决办法
935
查看次数

当用户关闭应用程序窗口时,是否有一种优雅的方法可以使JTable停止编辑?

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

java swing jtable tablecelleditor

2
推荐指数
2
解决办法
5602
查看次数