我仍然在玩Java和秋千(对这一切还是很陌生的)。我试图填充一个JComboBox与数据从. txt文件。我将数据拉入ArrayList,并试图用ArrayList变量填充JComboBox。然而,当我运行应用程序时,组合框是空白的。
这是数组代码:
private ArrayList<String> list = new ArrayList<String>();
文件读取器代码:
private void fileRead(){
try{
Scanner scan = new Scanner(new File("Examiner.txt"));
// ArrayList<String> list = new ArrayList<String>();
while(scan.hasNext()){
list.add(scan.next());
}
scan.close();
}
catch (FileNotFoundException e){
e.printStackTrace();
}
}
我用来做组合盒的混乱:
private void comboBoxes(){
panel.setBorder(new EmptyBorder(0, 5, 5, 10));
String[] comboBox1Array = list.toArray(new String[list.size()]);
JComboBox comboBox1 = new JComboBox(comboBox1Array);
panel.add(examinerLabel);
panel.add(comboBox1);
panel.add(viewTeachedCourses);
JComboBox comboBox2 = new JComboBox();
panel.add(courseLabel);
panel.add(comboBox2);
panel.add(viewPrograms);
add(panel, BorderLayout.LINE_START);
}
这个类的整个混乱的代码。
package messing with swing;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.*;
import javax.swing.border.EmptyBorder;
public class ReportGUI extends JFrame{
//Fields
private JButton viewAllReports = new JButton("View All Program Details");
private JButton viewPrograms = new JButton("View Programs and Majors Associated with this course");
private JButton viewTeachedCourses = new JButton("View Courses this Examiner Teaches");
private JLabel courseLabel = new JLabel("Select a Course: ");
private JLabel examinerLabel = new JLabel("Select an Examiner: ");
private JPanel panel = new JPanel(new GridLayout(6,2,4,4));
private ArrayList<String> list = new ArrayList<String>();
//private String storeAllString="";
public ReportGUI(){
reportInterface();
allReportsBtn();
comboBoxes();
fileRead();
}
private void fileRead(){
try{
Scanner scan = new Scanner(new File("Examiner.txt"));
// ArrayList<String> list = new ArrayList<String>();
while(scan.hasNext()){
list.add(scan.next());
}
scan.close();
}
catch (FileNotFoundException e){
e.printStackTrace();
}
}
private void reportInterface(){
setTitle("Choose Report Specifications");
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
JPanel panel = new JPanel(new FlowLayout());
add(panel, BorderLayout.CENTER);
setSize(650,200);
setVisible(true);
setResizable(false);
setLocationRelativeTo(null);
}
private void allReportsBtn(){
JPanel panel = new JPanel(new GridLayout(1,1));
panel.setBorder(new EmptyBorder(70, 50, 70, 25));
panel.add(viewAllReports);
viewAllReports.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e){
JFrame AllDataGUI = new JFrame();
new AllDataGUI();
}
});
add(panel, BorderLayout.LINE_END);
}
private void comboBoxes(){
panel.setBorder(new EmptyBorder(0, 5, 5, 10));
String[] comboBox1Array = list.toArray(new String[list.size()]);
JComboBox comboBox1 = new JComboBox(comboBox1Array);
panel.add(examinerLabel);
panel.add(comboBox1);
panel.add(viewTeachedCourses);
JComboBox comboBox2 = new JComboBox();
panel.add(courseLabel);
panel.add(comboBox2);
panel.add(viewPrograms);
add(panel, BorderLayout.LINE_START);
}
}
你知道我哪里出错了吗?
Taka仔细看看你做事情的顺序。。。
public ReportGUI(){
reportInterface();
allReportsBtn();
comboBoxes();
fileRead();
}
首先,您调用reportInterface
,它初始化您的框架...
其次,调用allReportsBtn
,创建按钮...
第三,您调用comboBox
,它将List
的内容应用到您的组合框,该组合框是空的...
第四,调用fileRead
,它从文件中读取值。。。
您提供给JComboBox
的数组与您读取的文件值的列表之间没有关系,因此即使您告诉combobox值已更改,它也不会看到更改
试着做一些更像
public ReportGUI(){
reportInterface();
allReportsBtn();
fileRead();
comboBoxes();
}
反而...
public ReportGUI()
{
reportInterface();
allReportsBtn();
comboBoxes();
fileRead();
}
正如奥比切雷所指出的那样:
comboBox()
,它创建组合框并用空List填充组合框。fileRead()
方法,该方法将数据添加到List中,但这不会更新组合框的模型。代码顺序需要颠倒:
fileRead();
comboBoxes();
< br >我有这段代码,其中我设计了一个< code >可编辑的JComboBox来侦听我的< code>keyPressed事件,并显示一条消息,说明键已被按下。但我不知道为什么这没用。作为初学者,我可能在逻辑上/概念上犯了错误。 因此,我想征求关于如何构建代码的建议,以使其工作。 密码
问题内容: 我做错了此事,或者我不了解这种方法的工作方式。 我本以为suresureCapacity可以让我插入一条记录,该记录的索引不超过该值。有其他方法可以做到这一点吗? 我在第三行收到IndexOutOfBounds错误。 问题答案: 不,不改变 逻辑大小 的-它改变的 能力 ,它的大小列表前,可以在到达下一个需要复制的值。 您需要非常清楚逻辑大小(即范围内的所有值都可以访问,并且添加新元素
问题内容: ArrayList在内部使用什么数据结构? 问题答案: 内部使用。 在向中添加项目时,列表会检查后备阵列是否还有剩余空间。如果有空间,则将新项目添加到下一个空白处。如果没有空间,则会创建一个更大的新阵列,并将旧阵列复制到新阵列中。 现在,还有更多空间,新元素将添加到下一个空白空间。 由于人们真的很喜欢源代码: 直接跳出JDK。
问题内容: 对数组列表中的等效方法有一个疑问,下面的代码将其剪裁为true。 有谁知道它为什么给出真正的答案。 问题答案: 在文档中查找的equals()方法 当且仅当指定对象也是一个列表,并且两个列表具有相同的大小,并且两个列表中所有对应的元素对相等时,才返回true。 由于没有元素,因此满足所有条件。 如果将元素添加到两个列表中( 每个 元素 至少一个 ),以查看所需的输出。
问题内容: 我需要用ArrayList填充JComboBox。有什么办法吗? 问题答案: 使用ArrayList类的方法并将其传递给 有关更多信息,请参见JavaDoc和教程。
主要内容:1 Java JComboBox的介绍,2 Java JComboBox的声明,3 Java JComboBox的构造方法,4 Java JComboBox的方法,5 Java JComboBox的案例1,6 Java JComboBox的案例21 Java JComboBox的介绍 Choice类的对象用于显示选项的弹出菜单。用户选择的选项显示在菜单顶部。它继承了JComponent类。 2 Java JComboBox的声明 我们来看一下javax.swing.JComboBox类