2016-05-25 9 views
0

У меня есть JTable с примерно 17 столбцами. Для некоторых из этих столбцов я хочу ComboBoxes, для других - нет. Некоторый код:Конкретный comboBox по определенному номеру столбца в таблице

public final JTable table; 

void setCellEditors(){ 

    setBooleanCellEditor (table); // comboBox for boolean values 
    setIntCellEditor (table); // comboBox for int values 
    setTypeCellEditor (table); 
    setAnotherTypeCellEditor (table); 
    // .. and so on, for all types I need comboboxes 
} 

Функция cellEditor для большинства типов выглядеть следующим образом:

private void setTypeCellEditor (JTable jt) { 
    DefaultCellEditor dce = new DefaultCellEditor (Type.buildComboBox()); 
    jt.setDefaultEditor (Type.class, dce); 
} 

И это прекрасно работает, потому что тип является уникальным для этой таблицы, другими словами, у меня есть только один столбец с типом Boolean, один с Int, один с AnotherType и т. д. Проблема в том, что два столбца имеют значения String, но нуждаются в разных ComboBox. Смысл, код выше не работает, потому что они оба String.class.

Естественно, я пытался решить это, говоря: «На колонке 10 Я хочу, чтобы этот ComboBox»:

private void setYetAnotherTypeCellEditor (JTable jt) { 
    DefaultCellEditor dce = new DefaultCellEditor (YetAnotherType.buildComboBox()); 
    if (jt.getColumnModel().getColumnCount() > 0) { 
     jt.getColumnModel().getColumn (9).setCellEditor (dce); 
    } 
} 

Это, однако, кажется, не работает, и я не знаю, почему. Я также пробовал this guide, но это не помогает. В принципе, я думаю, что setCellEditor по какой-то причине не устанавливает редактор ячеек.

Трудно быть более конкретным, потому что за этим стоит много кода.

+2

* «Один столбец, например, имеет логические значения, поэтому я создаю флажок ..» .. .. - будет логическим элементом управления для булевого значения. –

+0

вы можете посмотреть в этом примере .. http://stackoverflow.com/questions/14355712/adding-jcombobox-to-a-jtable-cell –

+0

Возможный дубликат [Как добавить JComboBox в ячейку JTable?] (Http : //stackoverflow.com/questions/2059229/how-to-add-a-jcombobox-to-a-jtable-cell) – Tiz

ответ

3

Трудно быть более конкретным, потому что за этим стоит много кода.

Using a Combo Box as an Editor иллюстрирует установку редактора ячейки по столбцу. A Minimal, Complete, and Verifiable example, как показано ниже, позволит вам изучить проблему изолированно.

enter image description here

import java.awt.EventQueue; 
import javax.swing.DefaultCellEditor; 
import javax.swing.DefaultComboBoxModel; 
import javax.swing.JComboBox; 
import javax.swing.JFrame; 
import javax.swing.JScrollPane; 
import javax.swing.JTable; 
import javax.swing.table.TableCellEditor; 

/** 
* @see https://stackoverflow.com/a/37435196/230513 
*/ 
public class Test { 

    private void display() { 
     JFrame f = new JFrame("Test"); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     JTable table = new JTable(1, 2); 
     table.getColumnModel().getColumn(0).setCellEditor(Type1.buildComboBox()); 
     table.getColumnModel().getColumn(1).setCellEditor(Type2.buildComboBox()); 
     f.add(new JScrollPane(table)); 
     f.pack(); 
     f.setLocationRelativeTo(null); 
     f.setVisible(true); 
    } 

    private static class Type1 { 

     private static TableCellEditor buildComboBox() { 
      return new DefaultCellEditor(new JComboBox(
       new DefaultComboBoxModel<>(new String[]{"A", "B", "C"}))); 
     } 
    } 

    private static class Type2 { 

     private static TableCellEditor buildComboBox() { 
      return new DefaultCellEditor(new JComboBox(
       new DefaultComboBoxModel<>(new String[]{"X", "Y", "Z"}))); 
     } 
    } 

    public static void main(String[] args) { 
     EventQueue.invokeLater(new Test()::display); 
    } 
} 
1

Я не вижу, где вы инициализировать JTable именем table, и я не вижу, где это та же JTable передается setYetAnotherTypeCellEditor() в качестве параметра имени jt. Я предполагаю, что jt не null; но без столбцов, jt.getColumnModel().getColumnCount() > 0 может быть false. Попробуйте

private void setYetAnotherTypeCellEditor (JTable jt) { 
    DefaultCellEditor dce = new DefaultCellEditor (YetAnotherType.buildComboBox()); 
    jt.getColumnModel().getColumn (9).setCellEditor (dce); 
} 

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

  • Нет связанных вопросов^_^