如何通过单击 JButton 启动第二个 JFrame?
How to launch a second JFrame from clicking a JButton?
我正在制作一个待办事项列表应用程序,并且我有一个 PrimaryList 框架和一个 SubList 框架。当用户 select 从 PrimaryList(杂货店......或类似的东西)中获取东西然后点击向前箭头 JButton 时,它应该启动 SubList 框架。现在这是我对名为 btnArrow 的向前箭头按钮的 actionPerformed 方法所拥有的。
private void btnArrowActionPerformed(java.awt.event.ActionEvent evt) {
lstToDoLists.addListSelectionListener(new ListSelectionListener(){
public void valueChanged(ListSelectionEvent e){
if (lstToDoLists.getSelectedIndex() > 0){
btnArrow.addActionListener(new ActionListener(){
public void actionPerformed (ActionEvent ae){
if (btnArrow==ae.getSource()){
SubList sublist = new SubList();
sublist.setVisible(true);
}
}
});
}
}
});
}
现在,当我 运行 PrimaryList 文件并单击我的 JList 中的一个项目然后 select 向前箭头按钮时,我什么也得不到。但是当我从列表中单击另一个元素并再次按下向前箭头按钮时,我的子列表弹出两次。
有些东西不是我写的,我希望其他人知道如何解决这个问题。
您在侦听器内部添加侦听器 -- 这是您不想做的事情,因为这意味着每次发生事件时都会添加新的侦听器。
解决方案:不要在其他事件侦听器内部添加侦听器,而是在代码的构造函数或初始化方法中添加一次侦听器。
请注意,我根本不会使用 ListSelectionListener
。相反,我只是在按钮上使用一个 ActionListener。然后在该侦听器中,获取列表的选择并使用它。
例如,
private void btnArrowActionPerformed(java.awt.event.ActionEvent evt) {
// if list contains String:
String selectedItem = (String) lstToDoLists.getSelectedItem();
// check that selectedItem isn't null, i.e,
if (selectedItem != null) {
// TODO: do something with selection here
}
}
附带推荐,请看The Use of Multiple JFrames, Good/Bad Practice?。
我正在制作一个待办事项列表应用程序,并且我有一个 PrimaryList 框架和一个 SubList 框架。当用户 select 从 PrimaryList(杂货店......或类似的东西)中获取东西然后点击向前箭头 JButton 时,它应该启动 SubList 框架。现在这是我对名为 btnArrow 的向前箭头按钮的 actionPerformed 方法所拥有的。
private void btnArrowActionPerformed(java.awt.event.ActionEvent evt) {
lstToDoLists.addListSelectionListener(new ListSelectionListener(){
public void valueChanged(ListSelectionEvent e){
if (lstToDoLists.getSelectedIndex() > 0){
btnArrow.addActionListener(new ActionListener(){
public void actionPerformed (ActionEvent ae){
if (btnArrow==ae.getSource()){
SubList sublist = new SubList();
sublist.setVisible(true);
}
}
});
}
}
});
}
现在,当我 运行 PrimaryList 文件并单击我的 JList 中的一个项目然后 select 向前箭头按钮时,我什么也得不到。但是当我从列表中单击另一个元素并再次按下向前箭头按钮时,我的子列表弹出两次。
有些东西不是我写的,我希望其他人知道如何解决这个问题。
您在侦听器内部添加侦听器 -- 这是您不想做的事情,因为这意味着每次发生事件时都会添加新的侦听器。
解决方案:不要在其他事件侦听器内部添加侦听器,而是在代码的构造函数或初始化方法中添加一次侦听器。
请注意,我根本不会使用 ListSelectionListener
。相反,我只是在按钮上使用一个 ActionListener。然后在该侦听器中,获取列表的选择并使用它。
例如,
private void btnArrowActionPerformed(java.awt.event.ActionEvent evt) {
// if list contains String:
String selectedItem = (String) lstToDoLists.getSelectedItem();
// check that selectedItem isn't null, i.e,
if (selectedItem != null) {
// TODO: do something with selection here
}
}
附带推荐,请看The Use of Multiple JFrames, Good/Bad Practice?。