java - 组合框不会显示数据

标签 java swing combobox

我正在开发一个小程序来将文件复制到剪贴板。组合框是根据指定目录中的文件夹/文件填充的。第一个 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/

相关文章:

java - 如何以编程方式将映射资源添加到 hibernate 配置以创建 session 工厂?

java - 您可以在诺基亚手机 (N80/N95) 上使用 Java Midlet 录制音频而 JVM 不会泄漏内存吗?

java - JFrame 的比例调整大小

java - 使用java swing删除选定的复选框

arrays - 清除组合框上的访问冲突

java - 从 ArrayList HashMap 中获取多个随机值

java - RecyclerView 内部 fragment 在 Android API 22 中不滚动

java - 如何在组合框中显示操作的名称

silverlight - 使用MVVM模式在Silverlight组合框中选择第一项

c++ - Visual Studio C++ 组合框控件不适用于多字节字符集