我正在开发一个小程序来将文件复制到剪贴板。组合框是根据指定目录中的文件夹/文件填充的。第一个 comboBox
已正确填充。现在,第二个组合框已添加,第一个框不再显示,并且显示的框没有加载任何项目。
更新:我已经重写了代码,现在可以看到第二个组合框。存储在 Object [] subFiles 中的数据未传递到第二个组合框
public class s2 extends JPanel implements ActionListener, Runnable{
public static File folder = new File("u:/response");
static String temp = "";
final JComboBox t1 = new JComboBox();
final JComboBox t2 = new JComboBox();
final Object [] files;
Object [] subFiles;
List<String> list1 = new ArrayList<String>();
static List<File> list2 = new ArrayList<File>();
public s2() {
List<String> list1 = new ArrayList<String>();
List<File> list2 = new ArrayList<File>();
for (File fl : folder.listFiles())
{
list1.add(fl.getName().toUpperCase());
}
files = list1.toArray();
t1.setModel(new DefaultComboBoxModel(files));
}
public class tier1 implements ActionListener
{
@Override
public void actionPerformed(ActionEvent e) {
int i = t1.getSelectedIndex();
File node = new File(folder.getAbsoluteFile() + "\\" + list1.get(i));
listFiles(node);
subFiles = list2.toArray();
t2.setModel(new DefaultComboBoxModel(subFiles));
}
}
public class tier2 implements ActionListener
{
@Override
public void actionPerformed(ActionEvent e2){
}
}
public static void listFiles (File folder){
for (final File fileEntry : folder.listFiles()){
if (fileEntry.isFile()){
temp = fileEntry.getAbsolutePath();
list2.add(fileEntry);
System.out.println(temp);
}
}
}
@Override
public void run() {
JFrame f = new JFrame("Response Library");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
UtilityBar ub = new UtilityBar();
f.setJMenuBar(ub.menuBar);
f.add(this);
f.add(t1);
f.add(t2, BorderLayout.SOUTH);
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
f.setPreferredSize(new Dimension (75,300));
}
public static void main(String[] args) {
EventQueue.invokeLater(new s2());
}
最佳答案
JFrame
使用 BorderLayout
作为默认布局管理器。当你这样做时
f.add(t1);
f.add(t2);
两个组合框都放置在同一位置 (BorderLayout.CENTER
),并且布局管理器在每个位置仅支持一个组件。
f.add(t1);
f.add(t2, BorderLayout.SOUTH);
将第二个放在第一个下面,这样两个组合框都应该可见。
此外,您应该仅在 event dispatch thread 中创建和访问 swing 组件。 .
关于java - 组合框不会显示数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31278335/