Ich habe eine JList, mit der Sie auswählen können, welche Optionen Sie "abbrechen" möchten. Wenn Sie auf die Abbrechen-Schaltfläche klicken, druckt ein JLabel, welche Optionen abgebrochen wurden. Wenn ich jedoch versuche, den Code zu testen und die Optionen auswähle und auf "Abbrechen" klicke, druckt JLabel nichts. Also nehme ich an, dass der ActionListener für die Abbrechen-Schaltfläche nicht funktioniert. Ich habe den entsprechenden Code unten enthalten:Java Swing - Jlabel ActionListener druckt keine ausgewählte Checkbox
public class WarehouseInterface extends JFrame{
private JFrame frame;
public WarehouseInterface(){
frame = new JFrame("Warehouse Interface");
DefaultListModel demoList = new DefaultListModel();
HashMap<String, Job> jobHashMap = SharedInformation.jobs;
int i = 0;
ArrayList<String> jobIDs = new ArrayList<>();
Iterator it = jobHashMap.entrySet().iterator();
while (it.hasNext() && i < 10) {
Map.Entry pair = (Map.Entry)it.next();
Job job = (Job) pair.getValue();
String jobID = job.getID();
demoList.add(i, jobID);
jobIDs.add(jobID);
i++;
}
JList list = new JList(demoList);
list.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
list.setCellRenderer(new CheckList());
JButton cancel = new JButton("Cancel");
cancel.setFont(new Font("Serif", Font.PLAIN, 14));
JPanel panel2 = new JPanel();
panel2.setLayout(new GridLayout(2,0));
panel2.add(list);
panel2.add(cancel);
JPanel panel3 = new JPanel();
panel3.setLayout(new GridLayout(3,0));
panel3.add(label3);
ActionListener cancelListener = new ActionListener(){
@Override
public void actionPerformed(ActionEvent e){
for(int index : list.getSelectedIndices()) {
String jobID = (String) demoList.get(index);
JLabel cancelledJobLabel = new JLabel(jobID);
cancelledJobLabel.setPreferredSize(new Dimension(50, 20));
cancelledJobLabel.setFont(new Font("Serif", Font.PLAIN, 18));
cancelledJobLabel.setOpaque(true);
panel3.add(cancelledJobLabel);
//ERROR HERE :(
}
}
};
cancel.addActionListener(cancelListener);
frame.add(panel2, BorderLayout.CENTER);
frame.add(panel3, BorderLayout.SOUTH);
frame.pack();
frame.setVisible(true);
}
class CheckList extends JLabel implements ListCellRenderer {
@Override
public Component getListCellRendererComponent(JList list, Object value,
int index, boolean isSelected, boolean hasFocus) {
setComponentOrientation(list.getComponentOrientation());
if (isSelected) {
setBackground(Color.RED);
setForeground(Color.WHITE);
// unselected, and not the DnD drop location
} else {
setBackground(Color.WHITE);
setForeground(Color.BLACK);
};
setOpaque(true);
setEnabled(list.isEnabled());
setFont(list.getFont());
setText(value.toString());
return this;
}
}
'Also ich nehme an, dass der ActionListener für den Abbrechen-Button nicht funktioniert. - - Übernehmen Sie nicht. Teste deine Theorie. Fügen Sie dem ActionLIstener einige System.out.println (...) Anweisungen hinzu, um zu sehen, ob sie jemals ausgeführt werden. – camickr
@camickr Hinzugefügt einige Drucke und sie erschienen, so dass ich denke, das ist nicht das Problem. Die JobID-Zeichenfolge ist keine leere Zeichenfolge, da der ActionListener diese ebenfalls ausgibt. Das einzige Problem, das es sein kann, ist, dass das JLabel cancelledJobLabel es nicht anzeigen möchte. – assassinweed2
@Berger Entschuldigung, das ist nur ein Fehler beim Kopieren und Einfügen. Ich habe den Code oben editiert, um ihn einzuschließen. – assassinweed2