gpt4 book ai didi

java - 组合框不会显示数据

转载 作者:行者123 更新时间:2023-11-30 03:21:16 26 4
gpt4 key购买 nike

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com