2016-02-26 5 views
0

JTable:Как добавить JComboBox на JTable ячейки на MouseClick и на основе других ячеек значений из той же JTable

http://i.stack.imgur.com/LDorA.jpg

Я создал JTable в NetBeans, в котором я принести значения из базы данных в определенных столбцах, как, как показаны на изображении я подвожу значение для АСМАПА, агрегаты, SPECIFICRANGE колонна, но второй столбец Observ ED VALUE я сохранил пустым пользовательского ввода, пользовательский ввод таким образом, что всякий раз, когда пользователь нажимает на ячейку перед Цвет он должен получить JComboBox в ячейке второй столбцы я имею в виду ячейку перед из цвет на MouseEvent и для других клеток я использую editCellAt() для того, чтобы accompalish это я написал код, приведенный ниже, и когда я нажимаю на ячейки перед цветом я получаю JComboBox также при Я нажимаю на другие ячейки, я получаю JComboBox, но мне нужно получить e ditCellAt() функциональность

Я думаю DefaultCellEditor становится фиксированным для всего столбца, но мне это нужно только для конкретной ячейки на MouseClick

if(table.getValueAt(table.getSelectedRow(),0).toString().equals("Color")) 
{ 
    TableColumn colorColumn = table.getColumnModel().getColumn(1); 
    JComboBox comboBox = new JComboBox(); 
    comboBox.addItem("Red"); 
    comboBox.addItem("Greyish"); 
    comboBox.addItem("Yellow"); 
    colorColumn.setCellEditor(new DefaultCellEditor(comboBox)); 
}    
else 
{ 
    table.editCellAt(table.getSelectedRow(), 1); 
} 

ответ

1

Вот пример, который показывает, как динамически возвращать пользовательский редактор:

import java.awt.*; 
import java.util.List; 
import java.util.ArrayList; 
import javax.swing.*; 
import javax.swing.border.*; 
import javax.swing.table.*; 

public class TableComboBoxByRow extends JPanel 
{ 
    List<String[]> editorData = new ArrayList<String[]>(3); 

    public TableComboBoxByRow() 
    { 
     setLayout(new BorderLayout()); 

     // Create the editorData to be used for each row 

     editorData.add(new String[]{ "Red", "Blue", "Green" }); 
     editorData.add(new String[]{ "Circle", "Square", "Triangle" }); 
     editorData.add(new String[]{ "Apple", "Orange", "Banana" }); 

     // Create the table with default data 

     Object[][] data = 
     { 
      {"Color", "Red"}, 
      {"Shape", "Square"}, 
      {"Fruit", "Banana"}, 
      {"Plain", "Text"} 
     }; 
     String[] columnNames = {"Type","Value"}; 

     DefaultTableModel model = new DefaultTableModel(data, columnNames); 
     JTable table = new JTable(model) 
     { 
      // Determine editor to be used by row 
      public TableCellEditor getCellEditor(int row, int column) 
      { 
       int modelColumn = convertColumnIndexToModel(column); 

       if (modelColumn == 1 && row < 3) 
       { 
        JComboBox<String> comboBox1 = new JComboBox<String>(editorData.get(row)); 
        return new DefaultCellEditor(comboBox1); 
       } 
       else 
        return super.getCellEditor(row, column); 
      } 
     }; 

     JScrollPane scrollPane = new JScrollPane(table); 
     add(scrollPane); 
    } 

    private static void createAndShowUI() 
    { 
     JFrame frame = new JFrame("Table Combo Box by Row"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.add(new TableComboBoxByRow()); 
     frame.setSize(200, 200); 
     frame.setLocationByPlatform(true); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) 
    { 
     EventQueue.invokeLater(new Runnable() 
     { 
      public void run() 
      { 
       createAndShowUI(); 
      } 
     }); 
    } 
} 

в вашем случае вам необходимо изменить метод getCellEditor(...) вернуть то выпадающий основе в данные в столбце 0 таблицыModel, в противном случае верните редактор по умолчанию. Вам также может потребоваться переопределить метод editCellAt(...), чтобы сделать редактирование ячейки основанной на данных в столбце 0.

+0

Привет, .. Поскольку я использовал JTable из netbeans, поэтому я добавил метод getCellEditor(), настроив код, но я не получаю никаких combobox и то, что мне нужно для кода в if() блоке, я имею в виду, как мне нужно вызвать метод Overridden getCellEditor – Amaan

+0

Привет, .. Я пробовал это, я не успеваю, мне нужно получить JComboBox на Mouse Event Я не получаю, как мне нужно это делать. Пожалуйста помоги. – Amaan

+0

Привет, @camickr, пример, который вы указали, появляется, когда я google, но как это нужно реализовать для одной ячейки, ... Я имею в виду, как это сделать в Mouse Event, ..... – Amaan

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

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