简体   繁体   中英

How to add the JcomboBox in JTable using Java?

I Browse a csv file and load the contents of the file to Jtable. I want to add the JcomboBox in every row of the JTable .

Here is my tool for your reference:

https://i.stack.imgur.com/7xBHD.jpg

I dont know how to add the ComboBox in each column of row.please help me to solve this problem .Any help is appreciated

Here is my code for your reference....

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.Label;
import java.awt.List;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.ArrayList;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.filechooser.FileNameExtensionFilter;
import javax.swing.table.DefaultTableModel;

import com.csvreader.CsvReader;

public class GUI {

    private JPanel dialog = null;
    private AboutDialog adlg;

    public void addComponentsToPane() {

        final JTextField txtfldcsvpth = new JTextField("Select a folder");
        final JTextField txtsimprepname = new JTextField("Select a folder");
        final JButton Btnbrowsecsv = new JButton("Select file");
        final JButton BtnsimpRep = new JButton("Create SimpRep");
        final JTable table = new JTable(){
            final long serialVersionUID = 1L;
            public boolean isCellEditable(int row,int column) {                
                    return false;               
            };
        };

        BtnsimpRep.setEnabled(true);

        dialog.setLayout(new GridBagLayout());
        GridBagConstraints gBC = new GridBagConstraints();

        gBC.anchor = GridBagConstraints.LINE_START;
        gBC.fill = GridBagConstraints.HORIZONTAL;
        gBC.insets = new Insets(3, 3, 3, 3);
        gBC.weightx = 1;
        gBC.weighty = 0;


        /******************************Browse Csv File***************************************/
        JLabel label1 = new JLabel("Input File");
        label1.setHorizontalAlignment(SwingConstants.RIGHT);
        label1.setHorizontalTextPosition(SwingConstants.RIGHT);
        label1.setPreferredSize(new Dimension(100, Btnbrowsecsv
                .getPreferredSize().height));
        gBC.gridx = 0;
        gBC.gridy = 0;
        dialog.add(label1, gBC);
        //jtextfield for CsvPath
        gBC.gridx = 1;
        gBC.gridy = 0;
        txtfldcsvpth.setPreferredSize(new Dimension(200, Btnbrowsecsv
                .getPreferredSize().height));
        txtfldcsvpth.setEditable(false);
        dialog.add(txtfldcsvpth, gBC);
        //Jbutton for Csv Browsing..
        gBC.gridx = 2;
        gBC.gridy = 0;
        Btnbrowsecsv.setToolTipText("Select folder containing STEP files");
        Btnbrowsecsv.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                // TODO Auto-generated method stub
                String selectedFile = fileChooserMethod();
                if (selectedFile != null) {
                    txtfldcsvpth.setText(selectedFile);
                    try{
                    BufferedReader br = new BufferedReader(new FileReader(new File(selectedFile)));
                    ArrayList <String[]> elements = new ArrayList<String[]>();
                    String line = null;
                    while((line = br.readLine())!=null) {
                        String[] splitted = line.split(",");
                        elements.add(splitted);
                    }
                    br.close();
                    JOptionPane.showMessageDialog(null, elements);
                    String[] columNames = new String[] {"Serial No","PartNumber", "Quantity"};

                    Object[][] content = new Object[elements.size()][3];
                    for(int i=1; i<elements.size(); i++) {
                        content[i][0] = i;
                        content[i][1] = elements.get(i)[1].trim();
                        content[i][2] = elements.get(i)[0].trim();
                        //content[i][2] = elements.get(i)[2].trim();
                       // content[i][3] = elements.get(i)[3].trim();
                    }
                    JOptionPane.showMessageDialog(null, content.length);
                    table.setModel(new DefaultTableModel(content,columNames));
                    }catch(Exception e){

                    }
                }
            }
        });
        dialog.add(Btnbrowsecsv, gBC);
        /******************************JTable for CsvGrid***************************************/


        JScrollPane js=new JScrollPane(table, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
        js.setPreferredSize(new Dimension(300 + Btnbrowsecsv
                .getPreferredSize().width, 400));
        js.setVisible(true);
        js.setHorizontalScrollBar(null);
         // final JTable jt=new JTable(data,column);    
          table.setCellSelectionEnabled(false); 
          table.setRowSelectionAllowed(false);
          table.setBorder(BorderFactory.createEtchedBorder());
          table.setRowHeight(20);
          table.setVisible(true);

          gBC.gridx = 0;
          gBC.gridy = 1;
          gBC.gridwidth = 3;
          dialog.add(js, gBC);


        /******************************JButton for SimpRepCreation***************************************/
        gBC.gridx = 0;
        gBC.gridy = 4;
        gBC.gridwidth = 3;
        BtnsimpRep.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                // TODO Auto-generated method stub
                boolean allFilesConverted = false;

            }
        });
        dialog.add(BtnsimpRep, gBC);


    }

    public GUI() {

        // JDialog.setDefaultLookAndFeelDecorated(true);
        dialog = new JPanel();
        // Set up the content pane.
        addComponentsToPane();

        dialog.setSize(dialog.getPreferredSize());
        adlg = new AboutDialog(dialog);

    }

    /*****************************file choosing method********************************************/
    private String fileChooserMethod() {
        JFileChooser fileChooser = new JFileChooser(".");
        FileNameExtensionFilter filter = new FileNameExtensionFilter("CSV files", "csv");
        fileChooser.setFileFilter(filter);
        fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
        fileChooser.setAcceptAllFileFilterUsed(false);
        int retVal = fileChooser.showDialog(dialog, "Select File");
        if (retVal == JFileChooser.APPROVE_OPTION) {
            return fileChooser.getSelectedFile().getPath();
        } else {
            return null;
        }

    }


    public static Object gettable (String csvPath){
         try {

                BufferedReader br = new BufferedReader(new FileReader(new File(csvPath)));
                ArrayList <String[]> elements = new ArrayList<String[]>();
                String line = null;
                while((line = br.readLine())!=null) {
                    String[] splitted = line.split(",");
                    elements.add(splitted);
                }
                br.close();

                Object[][] content = new Object[elements.size()][2];

                for(int i=0; i<elements.size(); i++) {
                    content[i][0] = elements.get(i)[0].trim();
                    content[i][1] = elements.get(i)[1].trim();
                    //content[i][2] = elements.get(i)[2].trim();
                    //content[i][3] = elements.get(i)[3].trim();
                }

               return content;
            } catch (Exception ex) {
                ex.printStackTrace();
                return null;
            }
    }
    public static void main(String[] args) {
        new GUI();
    }
}

Thanks Regards, Dinesh

Do you need to set the combo box in a specific cell? You can set a cell renderer which uses a JCombobox. Similar to this: http://www.java2s.com/Tutorial/Java/0240__Swing/UsingaJComboBoxinaCellinaJTableComponent.htm

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM