2013-11-22 2 views
1

Я пытаюсь отобразить JLabel внутри JTable путем переопределения метода getColumnClass как этотДисплей JLabel внутри JTable

 JLabel myLabel = new JLabel("ok"); 
     String[] columnNames = {"","",""}; 
     Object[][] data = 
      { 
       {myLabel, myLabel, myLabel}, 
       {myLabel, myLabel, myLabel}, 
       {myLabel, myLabel, myLabel}, 
      }; 


     DefaultTableModel model = new DefaultTableModel(data, columnNames); 
     table = new JTable(model) 
     { 
      public Class getColumnClass(int column) 
      { 
        return JLabel.class; 
      } 
     }; 

Но вместо этого он показывает что-то вроде этого (хэш-код?)

javax.swing.JLabel[,0,0,0x0,invalid,alignmentX=0.0,alignmentY=0.0,border=,flags=8388608,maximumSize=,minimumSize=,preferredSize=,defaultIcon=,disabledIcon=,horizontalAlignment=LEADING,horizontalTextPosition=TRAILING,iconTextGap=4,labelFor=,text=ok,verticalAlignment=CENTER,verticalTextPosition=CENTER] 

В чем проблема и как это исправить?

EDIT

код работает отлично, если использовать ту же логику для отображения ImageIcon

 ImageIcon myLabel = new ImageIcon(path); // ignore the variable name 

и изменения в getColumnClass

  public Class getColumnClass(int column) 
      { 
        return ImageIcon.class; 
      } 
+0

прочитал главу о рендерерах/редактора в свинге учебнике, чтобы понять, как они работают :-) И подчеркивая ответ @ mKorbel повторением: ** не ** хранить компоненты в таблице – kleopatra

+0

Спасибо, ребята, посмотрим на учебник. –

ответ

5

.

- Boolean — rendered with a check box. 
- Number — rendered by a right-aligned label. 
- Double, Float — same as Number, but the object-to-text translation is performed 
    by a NumberFormat instance (using the default number format for the current locale). 
- Date — rendered by a label, with the object-to-text translation performed 
    by a DateFormat instance (using a short style for the date and time). 
- ImageIcon, Icon — rendered by a centered label. 
- Object — rendered by a label that displays the object's string value. 
  • Renderer по умолчанию возвращает JLabel/JComponent

  • чтение Oracle учебника How to use Tables для работы примеры кода

+0

Спасибо, но из любопытства я попытался добавить простое изображение вместо 'JLabel' и изменил' getColumnClass', чтобы вернуть 'ImageIcon.getClass'. Он работает нормально. Почему это будет работать в случае ImageIcon, но не в случае JLabel? –

+0

См. Мое редактирование. –

+0

Зачем это работать в случае ImageIcon, но не в случае JLabel? потому что JTable и его модель предназначены для хранения только значения для представления JTables, контролируемого getColumnClass, и все окрашено в Renderer (вам не нужно создавать, но зависит от) – mKorbel

Смежные вопросы