繁体   English   中英

如何使用Java在JTable中添加JcomboBox?

[英]How to add the JcomboBox in JTable using Java?

我浏览一个csv文件,并将文件内容加载到Jtable。 我想在JTable的每一行中添加JcomboBox。

这是我的工具供您参考:

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

我不知道如何在row的每一列中添加ComboBox。请帮助我解决此问题。感谢您的帮助

这是我的代码供您参考。

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();
    }
}

谢谢问候,Dinesh

您是否需要在特定的单元格中设置组合框? 您可以设置使用JCombobox的单元格渲染器。 与此类似: http : //www.java2s.com/Tutorial/Java/0240__Swing/UsingaJComboBoxinaCellinaJTableComponent.htm

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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