如何解决ActionListener 没有用 JButton click 替换所需的面板
我正在创建一个待办事项列表,我正在尝试在页脚面板中创建一个名为“添加任务”的按钮,该按钮将消失并替换为提示用户输入有关他们的任务的信息我想添加到列表中。
我只是在使用 ActionListener 时遇到问题,因为它似乎没有做任何事情。我不确定我做错了什么。
以下是相关代码,任何帮助将不胜感激。 main 方法将包含主要问题,但我已经提供了其余的上下文代码。
import java.lang.reflect.Array;
import java.util.*;
import java.lang.*;
import java.awt.event.*;
import java.awt.*;
import javax.swing.*;
public class ToDo{
ArrayList<Item> TodoList = new ArrayList<>();
static int size=0;
public void addItem(String item,String category,int priority)
{
TodoList.add(new Item(item,category,priority));
size++;
}
//remove item at specified index spot
private void removeItem(String item )
{
TodoList.remove(getIndex(item));
size--;
}
public void getList()
{
for (Item item : TodoList)
{
System.out.println(item.toString());
}
}
// Return the index of the searched item,accounts for differences in white spaces and cases
public int getIndex(String item)
{
//return -1 if not found,\\s+ => more than one white space
int index = -1;
String itemString = item.replaceAll("\\s+","").toLowerCase();
for (int i = 0; i < TodoList.size(); i++) {
String listItem = TodoList.get(i).getItem().replaceAll("\\s+","").toLowerCase();
if (listItem.contains(itemString)) {
index = i;
break;
}
}
return index;
}
public String getItemString(int i)
{
return TodoList.get(i).toString();
}
public void sortItems()
{
TodoList.sort(Item.priorityComparator);
}
public void print() {
System.out.println("To-do List: ");
System.out.println("-----------");
getList();
if (TodoList == null) {
System.out.println("You're all done for today!");
}
}
public static void main(String[] args) {
ToDo todo = new ToDo();
todo.addItem("Get pickles","Shopping",2);
todo.addItem("Read book","School",3);
todo.addItem("Send letter","Other",1);
todo.addItem("Buy planner",4);
todo.addItem("Get potatoes",3);
//initialize data array to hold items
String[] data = new String[100];
for (int i = 0; i < size; i++) {
//sort items and populate data array with items converted to string
todo.sortItems();
data[i] = todo.getItemString(i);
}
///declare components of panels
JCheckBox[] checkBox;
JButton resetButton = new JButton("Reset List");
;
JButton addButton = new JButton("Add Task");
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
JPanel headerPanel = new JPanel();
JPanel contentPane = new JPanel();
JPanel footerPanel = new JPanel();
JLabel title = new JLabel("TO-DO");
headerPanel.add(title);
contentPane.setBorder(BorderFactory.createEmptyBorder(5,5,5));
contentPane.setLayout(new BorderLayout(5,5));
checkBox = new JCheckBox[size];
JPanel centerPanel = new JPanel();
centerPanel.setLayout(new GridLayout(0,1,5));
for (int i = 0; i < size; i++) {
checkBox[i] = new JCheckBox(data[i]);
centerPanel.add(checkBox[i]);
}
contentPane.add(headerPanel,BorderLayout.NORTH);
contentPane.add(centerPanel,BorderLayout.CENTER);
footerPanel.add(resetButton);
footerPanel.add(addButton);
contentPane.add(footerPanel,BorderLayout.SOUTH);
JButton okButton = new JButton("OK");
okButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
footerPanel.add(new JTextField("What category is the task?"));
}
});
frame.setContentPane(contentPane);
frame.setSize(400,500);
frame.setResizable(false);
frame.setLocationByPlatform(true);
frame.setVisible(true);
todo.print();
System.out.println("-----------------\n");
todo.removeItem("Get pickles");
todo.sortItems();
todo.print();
}
}
以下是代码中引用的Item类:
import java.util.Comparator;
public class Item{
private String item;
private String category;
private int priority;
//default constructor to initialize
public Item(String item,int priority){
this.item = item;
this.category = category;
this.priority = priority;
}
public String getItem() {
return item;
}
public void setItem(String item) {
this.item = item;
}
public String getCategory() {
return category;
}
public void setCategory(String category) {
this.category = category;
}
public void setPriority(int priority) {
this.priority = priority;
}
public int getPriority() {
return priority;
}
public String translatePriority()
{
if (priority == 1)
return "low";
else if (priority == 2)
return "medium";
else if (priority == 3)
return "high";
else if (priority == 4)
return "urgent";
else
return "invalid priority";
}
@Override
public String toString() {
return "PRIORITY: " +
translatePriority() + " || " + category + "," + item + " ";
}
// override Compare method of Comparator in order to reorder based on priority
public static Comparator<Item> priorityComparator = new Comparator<Item>() {
public int compare(Item i1,Item i2) {
int priority1 = i1.getPriority();
int priority2 = i2.getPriority();
/*For ascending order*/
return priority2-priority1;
}};
}
解决方法
首先:
- 变量名不应以大写字符开头
- 无需使用静态变量。
提示用户输入有关他们想要添加到列表中的任务的信息。
使用 JOptionPane
提示用户输入信息。
请参阅:How to Make Dialogs 了解更多信息和示例。
footerPanel.add(new JTextField("What category is the task?"));
文本字段未显示,因为您需要在添加组件后revalidate()
面板,以便为文本字段指定大小和位置。
但是,即使这样做也无济于事,因为您创建了一个没有引用的组件,因此您将无法轻松获取用户键入的文本。另外,您将如何从面板中删除组件(无需引用即可轻松删除)?
JOptionPane 是更简单的解决方案。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。