我正在製作一個打印JList上的項目的程序,並試圖儘可能少地使用內存。因此,我只想使用一個JList變量,但屏幕上仍然有兩個列表可以讀取。我遇到了一些問題,如何在第一個列表中查找值,並將其初始化並添加到JPanel中。一個JPanel上的多個JLists
JPanel的初始化方法:
public void run() {
panel = new JPanel(null);
//Initalize components
//List 1
ArrayList<String> st = new ArrayList<String>();
for(int i=0;i<10;i++) st.add("Number: " + i);
jli = new JList(st.toArray());
jli.setName("MyList1");
jli.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
jli.setLayoutOrientation(JList.VERTICAL);
jli.setSelectedIndex(-1);
jli.setVisibleRowCount(-1);
JScrollPane jsp = new JScrollPane(jli);
jsp.setSize(new Dimension(120, 130));
jsp.setLocation(5, 5);
panel.add(jsp);
//List 2
st = new ArrayList<String>();
for(int i=0;i<10;i++) st.add("#: " + i);
jli = new JList(st.toArray());
jli.setName("MyList2");
jli.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
jli.setLayoutOrientation(JList.VERTICAL);
jli.setSelectedIndex(-1);
jli.setVisibleRowCount(-1);
jsp = new JScrollPane(jli);
jsp.setSize(new Dimension(120, 130));
jsp.setLocation(150, 5);
panel.add(jsp);
//Button 1
jb = new JButton("Print 1");
jb.addActionListener(this);
jb.setLocation(5, 140);
jb.setSize(jb.getPreferredSize());
panel.add(jb);
//Button 2
jb = new JButton("Print 2");
jb.addActionListener(this);
jb.setLocation(120, 140);
jb.setSize(jb.getPreferredSize());
panel.add(jb);
}
ActionPreformed方法:
public void actionPerformed(ActionEvent e) {
switch (e.getActionCommand()) {
case "Print 1":
//This is where I need help
break;
case "Print 2":
System.out.println(jli.getSelectedValue());
break;
}
}
總之,我如何找到第一個JList的數據創建和第二的JList沒有做兩個JList的變量產生的?
使用單一當您有兩個JList實例時,「變量」不會爲您節省任何內存。您可能有10個變量指向這兩個列表,並且內存的增加將不重要... – MadProgrammer
是否有額外的JList內存的微量真的有害?爲什麼這是一個要求? – csmckelvey
@MadProgrammer問題offtopic是你在早上5點醒來的什麼,涉及到使用匿名類的問題,那麼你不必做'switch' – nachokk