2015-10-02 48 views
0

作为项目的一部分,我希望为每个单元制作不同类型对象的表格,但我无法理解如何使每个单元格都自定义......我发现here如何设置列它有一个像String,Bool,Slider这样的对象类型......但是对于每个Cell我都不知道!自定义表格原始对象

这幅画是从jformDesigner软件性能的一部分,我想是这样的表:

enter image description here

+0

可你也发表您的代码更好的理解? – sifho

+0

我使用本网站的代码:http://www.java2s.com/Code/Java/Swing-JFC/Asliderrendererforvolumevaluesinatable.htm – M410

回答

2

这个例子可以作为一个起点:

import java.awt.*; 
import java.util.*; 
import javax.swing.*; 
import javax.swing.event.*; 
import javax.swing.table.*; 

public class TablePropertyEditor extends JFrame 
{ 
    public TablePropertyEditor() 
    { 
     String[] columnNames = {"Type", "Value"}; 
     Object[][] data = 
     { 
      {"String", "I'm a string"}, 
      {"Date", new Date()}, 
      {"Integer", new Integer(123)}, 
      {"Double", new Double(123.45)}, 
      {"Boolean", Boolean.TRUE} 
     }; 

     JTable table = new JTable(data, columnNames) 
     { 
      private Class editingClass; 

      public TableCellRenderer getCellRenderer(int row, int column) 
      { 
       editingClass = null; 
       int modelColumn = convertColumnIndexToModel(column); 

       if (modelColumn == 1) 
       { 
        Class rowClass = getModel().getValueAt(row, modelColumn).getClass(); 
        return getDefaultRenderer(rowClass); 
       } 
       else 
        return super.getCellRenderer(row, column); 
      } 

      public TableCellEditor getCellEditor(int row, int column) 
      { 
       editingClass = null; 
       int modelColumn = convertColumnIndexToModel(column); 

       if (modelColumn == 1) 
       { 
        editingClass = getModel().getValueAt(row, modelColumn).getClass(); 
        return getDefaultEditor(editingClass); 
       } 
       else 
        return super.getCellEditor(row, column); 
      } 

      // This method is also invoked by the editor when the value in the editor 
      // component is saved in the TableModel. The class was saved when the 
      // editor was invoked so the proper class can be created. 

      public Class getColumnClass(int column) 
      { 
       return editingClass != null ? editingClass : super.getColumnClass(column); 
      } 
     }; 

     table.setPreferredScrollableViewportSize(table.getPreferredSize()); 
     JScrollPane scrollPane = new JScrollPane(table); 
     getContentPane().add(scrollPane); 
    } 

    public static void main(String[] args) 
    { 
     TablePropertyEditor frame = new TablePropertyEditor(); 
     frame.setDefaultCloseOperation(EXIT_ON_CLOSE); 
     frame.pack(); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
    } 
} 
+0

感谢您的帮助...我也想在一些单元格中添加滑块!这样有可能吗? – M410

+0

这是一个需要进一步扩展的简单示例。首先你需要创建一个“滑块编辑器”(我从来没有做过)。然后你需要修改代码来使用这个编辑器。所以也许你需要一个HashMap 。然后,在使用基于类的编辑器之前,您将首先查看此表。 – camickr

+0

我不认为这是做到这一点的正确方法!正如我在图片中看到的那样,有很多项目是定制的......可能有更好的方法来做到这一点 – M410