繁体   English   中英

返回多个选择Jlist作为字符串

[英]return multiple selections Jlist as a string

我对Java非常陌生,因此如果这是一个不好的问题,我深表歉意。 我正在使用JList允许用户从提供的列表中选择多个同类群组名称。 这只是一个较大程序的一部分,但这是我遇到的唯一麻烦。 我可以创建JList,但不能返回所选项目的字符串。如何将所选字符串提取到列表或数组中以进一步使用? 我的代码如下。

public class listSelection extends JFrame
{ public static void main(String[] args)
{
 new listSelection();
}

private JButton starsBackButton, starsFinishButton;
private JList starsList;

public listSelection()
{

    this.setDefaultCloseOperation(
        JFrame.EXIT_ON_CLOSE);
    this.setTitle("Generate Circos Image");
    this.setLocationRelativeTo(null);

JPanel mainStarsPanel = new JPanel();
            mainStarsPanel.setLayout(new BorderLayout());


JPanel starsPanel = new JPanel();
                Border starsBorder = BorderFactory.createTitledBorder("Stars Cohort (Hold Ctrl to select multiples)");
                starsPanel.setBorder(starsBorder);  
                String [] starsCohort = {   "_ASC-COMSC","_ASC-WKSHP","_LC-ALL","ADM-AACEA","ADM-HSCON","AE03","AE10","AG","ANTW",
                                            "AP-CA","AP-DA","AP-UT","APEXBR","APEXBR_CC","APEXBRBAK","ASC-COMSCH","ASC-DC","ASC-ISTART",
                                            "ASC-MTL","ASC-MTOL","ASC-ORIENT","ASC-RSS","ASC-SI","ASC-SS","ASC-TUT","ASC-WKSHOP","ASC-WKSHP",
                                            "AW_RES_UG","AWW","BAF","BAF1","BAF2","BAF3","BAF4","BFA_THR_NW","BIO1050","CBS","CBS-Bak",
                                            "CCGO","CCGR","CCPN","CR-CLUBSPT","DCE","DUS","FA-SAPWARN","FCUSHPCS","FTC","FTIAC_TEST",
                                            "FTP-REACH","FYS","GRS","GRS_BAK","GRS_RMV","GRSP709","GRSP809","HIGH","HON","HON_AW_TRN",
                                            "HON_BAK","HON_TRN_NS","HON_TRNSFR","IMSD_UG","KUWAIT","LAW","LC-350MAT","LC-350MF07","LC-ALL",
                                            "LC-ALL-AY","LC-ANTH","LC-ASTRON_","LC-ASTRONG","LC-AVSD","LC-BIO1050","LC-BIO1510","LC-C2C",
                                            "LC-CBS","LC-CHINESE","LC-COM","LC-COM-Bak","LC-COMERAC","LC-COMERIC","LC-COS","LC-COSC","LC-CYB",
                                            "LC-DCE","LC-DDIS3","LC-DESIGN","LC-DUS","LC-ED-FYE","LC-ED-KIN1","LC-ED-KINP","LC-ED-PATH",
                                            "LC-ED-SUCC","LC-ED-TC","LC-EDMORRI","LC-EME0900","LC-EME0993","LC-EME1050","LC-EME1800",
                                            "LC-EME2010","LC-EME2020","LC-ENBRIDG","LC-ESP1050","LC-ESP1800","LC-ESP2010","LC-ESP2020",
                                            "LC-ESPall","LC-FNP","LC-FOCOM","LC-FORENS","LC-FREQ","LC-FREQ10C","LC-FREQ10H","LC-FYCLIN","LC-FYT",
                                            "LC-HEALTH","LC-HISTORY","LC-HON.BIO","LC-HON.COM","LC-HONORS","LC-HONORSA","LC-HONORSB","LC-HONORSE",
                                            "LC-HONORSH","LC-HONORSM","LC-JOURNAL","LC-KHS-PE","LC-KHSGRAD","LC-LSAMP","LC-MATHCOR","LC-MCNAIR",
                                            "LC-MOTOWN","LC-NDN","LC-NEUROSC","LC-NUR","LC-OISS","LC-ORGCHEM","LC-PASSMAT","LC-PEACE",
                                            "LC-PEACEBK","LC-PHA2","LC-PR","LC-PREMED","LC-PSPRELW","LC-PSY","LC-PSY2","LC-PSYLIFE","LC-RSP0993",
                                            "LC-RURALMD","LC-SBA1","LC-SBA2","LC-SLAVIC","LC-SW","LC-SWCRIT","LC-SWL","LC-TED2250","LC-TED2251",
                                            "LC-TIP","LC-UPREPHS","LC-USL","LC-VET","LC-VISARTS","LC-WSUCOMP","LC-WSUCUS","LC?COMERIC","LISADOBBS1",
                                            "LISADOBBS4","LS_DEANAWD","LWJD","LX-BIO105X","MAC","MAC_","MCCSC","NMS","NNFT_UG","NNFTDR","NWLB-G",
                                            "NWLB-U","OISS","P-af9124","PREEXCLUDE","PREMED","PRSN","PSC","PSC_TRNS","RA-RH","RH-AH","RH-FA",
                                            "RH-GH","RH-RA","RH-TT","SCH","SDS","TER_STEM","TRANS_GOLD","TRANSFERS","TRIO","TRNS_GOLD","TRNS_GREEN",
                                            "UAC_REIN","UAC-REIN","UNVN","UR-UROP","VET","VMD","WAS","WDIR-HF","WDIR-MC","WDIR-WC","WDS","WDUS",
                                            "WSCH","WSCH_2000","WSCH_AWAYN","WSCH_GOLD","WSCH_GREEN","WSGO","WSGR"};

                JList<String> starsList = new JList<String> (starsCohort);
                starsList.setLayoutOrientation(JList.HORIZONTAL_WRAP);
                starsList.setVisibleRowCount(-1);
                starsList.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
                JScrollPane starsScroll = new JScrollPane (starsList,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
                                                        JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
                starsScroll.setPreferredSize(new Dimension(300,250));
            starsPanel.add(starsScroll);

            starsBackButton = new JButton ("Back");
            //starsBackButton.addActionListener( e -> starsBackClick());
            starsFinishButton = new JButton ("Finish");
            starsFinishButton.addActionListener(e -> starsFinishClick());   
        Box starsBox = Box.createHorizontalBox();
            starsBox.add(starsBackButton);
            starsBox.add(Box.createHorizontalGlue());
            starsBox.add(starsFinishButton);


        mainStarsPanel.add(starsPanel);
        mainStarsPanel.add(starsBox, BorderLayout.SOUTH);

        this.add(mainStarsPanel);

    this.pack();
    this.setVisible(true);
}       

private void starsFinishClick ()
    {   
        List<String> testSelect = ArrayList<String> ();
            testSelect.add(starsList.getSelectedValuesList());


        System.out.println(testSelect);
    }
}

我的理解是,我应该能够返回用.getSelectedValuesList选择的字符串。 我还需要能够更改结果以馈入程序的另一部分(ArrayList)。 感谢您为实现该目标提供的任何指导或替代方法。

如果要创建列表并将其他列表中的元素添加到列表中,则可以

  • 将要复制的列表传递到新列表的构造函数,例如:

     List<String> newList = new ArrayList<>(oldListOfString); 
  • 而不是add使用newList.addAll(oldList)

因此,您的方法可能看起来像:

private void starsFinishClick ()
{   
    List<String> testSelect = new ArrayList<String>();
    testSelect.addAll(starsList.getSelectedValuesList());

    System.out.println(testSelect);
}

但是您还有其他问题。 在您的listSelection构造函数中,您通过创建本地列表来隐藏starsList字段

JList<String> starsList = new JList<String>(starsCohort);

这意味着starsList字段仍将为null从而导致以后出现NullPointerException。 要解决此问题,只需为该字段分配新值(哦,别忘了向该字段添加泛型类型)。

starsList = new JList<String>(starsCohort);

同样在你的

List<String> testSelect = ArrayList<String> ();
testSelect.add(starsList.getSelectedValuesList());

您忘记了=ArrayList<String> ()之间的new关键字。

暂无
暂无

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

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