Редактор рендерера дает ошибку

1

Я пытаюсь мои руки на простой редактор визуализатора от сюда, но мой IDE NetBeans жалуется на ошибки в коде. Кто-нибудь может мне помочь.

Ниже приведены коды.

  public class CellEditor {

  public static void main(String[] argv) {
   DefaultTableModel model = new DefaultTableModel() {
     public Class getColumnClass(int columnIndex) {
      Object o = getValueAt(0, columnIndex);
       if (o == null) {
         return Object.class;
       } else {
        return o.getClass();
      }
     }
   };
  JTable table = new JTable(model);

  model.addColumn("Boolean", new Object[] { Boolean.TRUE });
 model.addColumn("Date", new Object[] { new Date() });
 model.addColumn("Double", new Object[] { new Double(Math.PI) });
 model.addColumn("Float", new Object[] { new Float(1.2) });
 model.addColumn("Icon", new Object[] { new ImageIcon("icon.gif") });
 model.addColumn("Number", new Object[] { new Integer(1) });
 model.addColumn("Object", new Object[] { "object" });

  Enumeration e = table.getColumnModel().getColumns();
   TableColumn col = (TableColumn) e.nextElement();

    col.setCellRenderer(table.getDefaultRenderer(Boolean.class)); //IDE complains cannot find 
      method setCellRenderer
    col.setCellEditor(table.getDefaultEditor(Boolean.class));   // IDE complains cannot find 
      method setCellEditor

  JFrame f = new JFrame();
  f.setSize(300,300);
  f.add(new JScrollPane(table));
  f.setVisible(true);
   }
 }

Спасибо всем.

  • 1
    Ваш отступ не является одинаковым, что делает ваш код очень трудным для чтения. Если вы смешиваете пробелы с вкладками, избегайте этого и используйте только пробелы. Пожалуйста, исправьте ваш код и опубликуйте свои полные сообщения об ошибках тоже.
  • 0
    Важно: покажите свой импорт, так как он может иметь отношение к вашей проблеме.
Теги:
swing
tablecellrenderer
tablemodel

2 ответа

4
Лучший ответ

TableColumn - это класс JavaFX а также swing. Убедитесь, что вы используете импорт swing

import javafx.scene.control.TableColumn;

import javax.swing.table.TableColumn;

Советы. Используйте <alt><enter> чтобы IDE автоматически находил импорт.

Поместите курсор сразу после col. найти методы класса. Вы также можете нажать <ctl><space> курсором после col.

  • 0
    Может быть, лучше, чем я. 1+
  • 1
    спасибо, проверил и использовал неправильный импорт.
Показать ещё 1 комментарий
3

Ваш код выглядит хорошо и должен компилироваться. Угадайте: у вас есть свой класс под названием TableColumn? Если это так, он затеняет основной класс Java TableColumn и предотвратит компиляцию кода. Если это так, переименуйте свой класс в другое, которое не столкнется с ядром класса Java.

Также, как и в моих комментариях, покажите свой импорт, так как они могут повлиять на вашу проблему.


В стороне, здесь ваш код отформатирован правильно. Обратите внимание, что это легче читать, так как вы точно знаете, где начинаются и заканчиваются методы и блоки:

import java.util.Date;
import java.util.Enumeration;
import javax.swing.*;
import javax.swing.table.*;

public class CellEditor {

   public static void main(String[] argv) {
      DefaultTableModel model = new DefaultTableModel() {
         public Class getColumnClass(int columnIndex) {
            Object o = getValueAt(0, columnIndex);
            if (o == null) {
               return Object.class;
            } else {
               return o.getClass();
            }
         }
      };
      JTable table = new JTable(model);

      model.addColumn("Boolean", new Object[] { Boolean.TRUE });
      model.addColumn("Date", new Object[] { new Date() });
      model.addColumn("Double", new Object[] { new Double(Math.PI) });
      model.addColumn("Float", new Object[] { new Float(1.2) });
      model.addColumn("Icon", new Object[] { new ImageIcon("icon.gif") });
      model.addColumn("Number", new Object[] { new Integer(1) });
      model.addColumn("Object", new Object[] { "object" });

      Enumeration e = table.getColumnModel().getColumns();
      TableColumn col = (TableColumn) e.nextElement();

      // IDE complains cannot find method setCellRenderer
      col.setCellRenderer(table.getDefaultRenderer(Boolean.class)); 

      // IDE complains cannot find method setCellEditor
      col.setCellEditor(table.getDefaultEditor(Boolean.class)); 

      JFrame f = new JFrame();
      f.setSize(300, 300);
      f.add(new JScrollPane(table));
      f.setVisible(true);
   }
}
  • 0
    спасибо за форматирование советую. Начну перенимать этот стиль
  • 0
    @CodeAngel: пожалуйста и рад, что вы нашли свою проблему и решили ее! Обратите внимание, что большинство современных IDE, таких как Eclipse, NetBeans и IntelliJ Idea, при желании отформатируют ваш код.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню