组合框不会显示数据
Combo Box will not display data
我正在开发一个将文件复制到剪贴板的小程序。根据指定目录中的 folders/files 填充 ComboBoxes。第一个 comboBox
适当填写。现在已经添加了第二个组合框,第一个框不再显示,并且显示的框没有加载任何项目。
更新:我重写了代码,现在可以看到第二个组合框了。存储在 Object [] subFiles 中的数据未传递到第二个 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());
}
JFrame
使用 BorderLayout
作为默认布局管理器。当你这样做时
f.add(t1);
f.add(t2);
两个组合框都放在同一个位置(BorderLayout.CENTER
),布局管理器在每个位置只支持一个组件。
f.add(t1);
f.add(t2, BorderLayout.SOUTH);
将第二个放在第一个下方,这样两个组合框都应该可见。
此外,您应该只在 event dispatch thread.
中创建和访问 swing 组件
我正在开发一个将文件复制到剪贴板的小程序。根据指定目录中的 folders/files 填充 ComboBoxes。第一个 comboBox
适当填写。现在已经添加了第二个组合框,第一个框不再显示,并且显示的框没有加载任何项目。
更新:我重写了代码,现在可以看到第二个组合框了。存储在 Object [] subFiles 中的数据未传递到第二个 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());
}
JFrame
使用 BorderLayout
作为默认布局管理器。当你这样做时
f.add(t1);
f.add(t2);
两个组合框都放在同一个位置(BorderLayout.CENTER
),布局管理器在每个位置只支持一个组件。
f.add(t1);
f.add(t2, BorderLayout.SOUTH);
将第二个放在第一个下方,这样两个组合框都应该可见。
此外,您应该只在 event dispatch thread.
中创建和访问 swing 组件