- Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathAppFrame.java
More file actions
Latest commit
80 lines (69 loc) · 2.87 KB
/
Copy pathAppFrame.java
File metadata and controls
80 lines (69 loc) · 2.87 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
importjava.awt.BorderLayout;
importjava.awt.event.ActionEvent;
importjava.awt.event.ActionListener;
importjavax.swing.JButton;
importjavax.swing.JFrame;
importjavax.swing.JOptionPane;
importjavax.swing.JScrollPane;
publicclassAppFrameextendsJFrame {
privateTitleBartitleBar;
privateListlist;
privateJScrollPanelistScrollPane;
privateButtonPanelbtnPanel;
publicAppFrame() {
this.setSize(800, 600);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLayout(newBorderLayout());
titleBar = newTitleBar();
list = newList();
btnPanel = newButtonPanel();
// Wrap list inside a JScrollPane for scrolling support
listScrollPane = newJScrollPane(list);
listScrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
this.add(titleBar, BorderLayout.NORTH);
this.add(listScrollPane, BorderLayout.CENTER);
this.add(btnPanel, BorderLayout.SOUTH);
addListeners();
this.setVisible(true);
}
privatevoidaddListeners() {
btnPanel.getAddTask().addActionListener(newActionListener() {
@Override
publicvoidactionPerformed(ActionEvente) {
StringtaskName = JOptionPane.showInputDialog(null, "Enter task name:");
if (taskName != null && !taskName.trim().isEmpty()) {
Tasktask = newTask(taskName);
list.add(task);
list.updateNumbers();
task.getDone().addActionListener(newActionListener() {
@Override
publicvoidactionPerformed(ActionEvente) {
task.changeState();
list.updateNumbers();
}
});
listScrollPane.revalidate(); // Refresh layout after adding task
listScrollPane.repaint();
}
}
});
btnPanel.getClear().addActionListener(newActionListener() {
@Override
publicvoidactionPerformed(ActionEvente) {
// Loop backwards to safely remove components while iterating
for (inti = list.getComponentCount() - 1; i >= 0; i--) {
if (list.getComponent(i) instanceofTask) {
Tasktask = (Task) list.getComponent(i);
// You will need a getter in Task class for checked status
if (task.isChecked()) {
list.remove(i);
}
}
}
list.updateNumbers();
list.revalidate();
list.repaint();
}
});
}
}