组合框不会显示数据

时间:2015-07-07 20:08:23

标签: java swing combobox

我正在开发一个小程序来将文件复制到剪贴板。组合框基于指定目录中的文件夹/文件填充。第一个comboBox填写得恰当。现在已经添加了第二个组合框,第一个框不再显示,并且显示的框没有加载项。

更新:我已经重写了代码,现在可以看到第二个comboBox。存储在Object []子文件中的数据未传递到第二个comboBox

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

1 个答案:

答案 0 :(得分:2)

JFrame使用BorderLayout作为默认布局管理器。当你这样做

f.add(t1);
f.add(t2);

两个组合框都放在相同的位置(BorderLayout.CENTER),布局管理器在每个位置只支持一个组件。

f.add(t1);
f.add(t2, BorderLayout.SOUTH);

将第二个放在第一个下面,这样两个组合框都应该可见。

此外,您应该只在event dispatch thread

中创建和访问swing组件