[英]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.