【发布时间】:2017-12-20 15:01:50
【问题描述】:
我正在编写一个程序,该程序需要我编写一个程序,该程序使用 GUI 允许用户输入他们的姓名并按下“初始化”按钮来开始程序的其余部分。在按下该按钮之前,应该禁用其余组件。之后,用户应该能够输入他们的类的名称,按下“添加”按钮,它们应该被添加到 JList 中。他们还应该能够从 JList 中选择项目并通过按“删除”按钮将其删除。但是,按下按钮时不会添加项目(所以我也不确定删除部分是否不正确)。有谁知道是什么原因造成的?
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JMenuBar;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.border.BevelBorder;
import javax.swing.border.LineBorder;
import javax.swing.border.TitledBorder;
public class ClassSchedule extends JFrame {
private JTextField nameField;
private JTextField classField;
private DefaultListModel<String> dlm;
private JList<String> list;
private JLabel nameLabel;
private JButton initializeButton;
private JButton addClassButton;
private JList list_1;
private JScrollPane scrollPane;
private JButton removeClassButton;
public ClassSchedule() {
getContentPane().setLayout(new BorderLayout(0, 0));
getContentPane().setBounds(400, 400, 800, 800);
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
JPanel studentPanel = new JPanel();
studentPanel.setBorder(new TitledBorder(new
BevelBorder(BevelBorder.LOWERED, null, null, null, null), "Add Student's
Name", TitledBorder.LEADING, TitledBorder.TOP, null, null));
getContentPane().add(studentPanel, BorderLayout.WEST);
studentPanel.setLayout(null);
nameLabel = new JLabel("Student's Name: ");
nameLabel.setBounds(10, 73, 82, 14);
studentPanel.add(nameLabel);
nameField = new JTextField();
nameField.setText("a name");
nameField.setBounds(102, 70, 86, 20);
studentPanel.add(nameField);
nameField.setColumns(10);
initializeButton = new JButton("Initialize");
initializeButton.setBounds(99, 147, 89, 23);
studentPanel.add(initializeButton);
JPanel classesPanel = new JPanel();
classesPanel.setBorder(new TitledBorder(new BevelBorder(BevelBorder.LOWERED, null, null, null, null), "Add, Delete, or Clear Classes", TitledBorder.LEADING, TitledBorder.TOP, null, null));
getContentPane().add(classesPanel, BorderLayout.EAST);
classesPanel.setLayout(null);
classField = new JTextField();
classField.setEnabled(false);
classField.setBounds(10, 38, 86, 20);
classesPanel.add(classField);
classField.setColumns(10);
addClassButton = new JButton("Add Class");
addClassButton.setEnabled(false);
addClassButton.setBounds(118, 37, 89, 23);
classesPanel.add(addClassButton);
classesPanel.setPreferredSize(new Dimension (220, 200));
studentPanel.setPreferredSize(new Dimension (220,200));
dlm = new DefaultListModel<>();
list = new JList<>(dlm);
list_1 = new JList();
list_1.setEnabled(false);
classesPanel.add(list_1);
list_1.setBorder(new LineBorder(new Color(0, 0, 0)));
list_1.setVisibleRowCount(6);
scrollPane = new JScrollPane(list_1);
scrollPane.setEnabled(false);
classesPanel.add(scrollPane);
scrollPane.setBounds(10, 106, 197, 60);
removeClassButton = new JButton("Remove Selected Class");
removeClassButton.setEnabled(false);
removeClassButton.setBounds(31, 207, 158, 23);
classesPanel.add(removeClassButton);
JMenuBar menuBar = new JMenuBar();
getContentPane().add(menuBar, BorderLayout.NORTH);
//register all the listeners
ButtonHandler bh = new ButtonHandler();
initializeButton.addActionListener(bh);
addClassButton.addActionListener(bh);
removeClassButton.addActionListener(bh);
}
//listener method for the buttons
class ButtonHandler implements ActionListener
{
@Override
public void actionPerformed(ActionEvent e) {
String name;
String classes;
//when a name is entered and initialize is pressed, store the name in a variable "name", enable the other components, and disable
//initialize components
if(e.getSource() == initializeButton)
{
name = nameField.getText();
nameField.setEnabled(false);
initializeButton.setEnabled(false);
classField.setEnabled(true);
addClassButton.setEnabled(true);
removeClassButton.setEnabled(true);
scrollPane.setEnabled(true);
list.setEnabled(true);
}
//when a class is entered and add class is pressed, add the name to the list
if(e.getSource() == addClassButton)
{
dlm.addElement(classField.getText());
}
//when a class(es) from the list is selected and remove is pressed, remove the items from the list
if(e.getSource() == removeClassButton)
{
list.remove(list.getSelectedIndex());
}
}
}
}
【问题讨论】:
-
1) 为了尽快获得更好的帮助,请发帖 minimal reproducible example 或 Short, Self Contained, Correct Example。 2) 请参阅Detection/fix for the hanging close bracket of a code block 了解我无法再费心解决的问题。
-
@AndrewThompson 感谢您的提示!我已经相应地调整了我的问题。如果您现在可以再看一下它,我将非常感激,因为它更具可读性。
-
@AndrewThompson:并且已经使答案无效
-
@HovercraftFullOfEels 我觉得应该回滚编辑,但我会让您自行决定。 OP:不要完全改变问题!要么将当前问题的答案标记为正确,要么删除整个问题。就新问题提出一个新问题(在单独的线程上)。
-
@AndrewThompson 哦,对不起,伙计们。这是我在这里提出的第一个问题。我不会再犯那个错误了。有没有办法撤消我所做的更改?
标签: java swing user-interface jlist