我正在尝试使用 if 语句来:
目前我的 if 语句似乎没有引用选择一周中的哪一天,而是仅输出列表长度的“else”。
有没有更好的方法来解决这个问题?
附注我是一个java新手,所以如果问题的措辞很奇怪,我深表歉意:)谢谢!
`导入 javax.swing.*; 导入java.util.List; 导入 java.awt.BorderLayout;
公开课DayChooser{
void buildGui(){
JFrame frame = new JFrame("Daily Chore Chart");
List<String> days = List.of("Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday" );
JComboBox<String> box = new JComboBox<>(days.toArray(new String[0]));
JList<String> chores = new JList<>(new DefaultListModel<>());
box.addActionListener( evt->{
DefaultListModel<String> model = (DefaultListModel<String>)chores.getModel();
model.clear();
model.addElement(box.getSelectedItem() + " Chores");
for(int i = 0; i < days.size(); i++) {
if (days.equals("Monday")) {
model.addElement("1. Clean the Bathroom");
model.addElement("2. Do the Laundry");
model.addElement("Do it");
}
else
model.addElement("No Chores!");
}
});
DefaultListModel<String> model = (DefaultListModel<String>)chores.getModel();
model.addElement("Daily Chores");
model.addElement("1. Make the Bed");
model.addElement("2. Clean the Litterbox");
model.addElement("3. Wash the Dishes");
model.addElement("4. Wipe down the Counters");
frame.add(box, BorderLayout.NORTH);
frame.add(chores, BorderLayout.CENTER);
frame.pack();
frame.setVisible(true);
frame.setSize(400,400);
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
}
public static void main(String[] args){
DayChooser dc = new DayChooser();
SwingUtilities.invokeLater( dc::buildGui );
}
}`
您的问题在于这一行:
if (days.equals("Monday")) {
days 是一个字符串列表,因此它永远不会等于一个字符串,即使该字符串是列表中唯一的字符串。
您需要做的,与您之前所做的相同,从您的盒子中取出所选的项目。只需将 if 语句替换为以下语句即可:
if ( box.getSelectedItem().equals("Monday")) {
或者,遵循一些好的做法:
if ( "Monday".equals(box.getSelectedItem()) {
即使发生了一些可疑的事情,并且
box.getSelectedItem()
将返回 null,这也可以避免抛出 NullPointerException