我有一个Edit按钮,用于控制Changebutton的操作。
当Editbutton为true时,Changebutton应该转到Edit,当它不为true时,它应该去查看。
问题是Editbutton没有一致地执行。
第一次加载代码时,编辑按钮将在true和false之间切换。但是,如果我按下Change按钮,Edit按钮将不再在true和false之间切换,但会在一次迭代中变为true然后变为false。第三次按预期执行,这个交替循环继续。
我在Editbutton的监听器中使用了一个return语句,它应该在if语句之后停止代码。我已经添加了数字来跟踪正在执行的内容,似乎第二次代码执行超过return语句,例如没有被停止。由于某种原因,代码正在重新加载第二次。
以下是我的代码的MCVE版本:
public class Toolbar {
static Color c;
static JButton buttonEdit = new JButton("Edit");
public static JFrame frame = new JFrame();
static boolean Edit, Delete;
public static void main(String[] args) {
Toolbar.WorkDiaryAllGui();
System.out.println("TOOLBAR");
}
public static JPanel Toolbar(String panelname){
FlowLayout layout = new FlowLayout();
JPanel Toolbar = new JPanel(new BorderLayout());
Toolbar.setLayout(layout);
JButton Changebutton = new JButton("Diary");
Changebutton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
WorkDiaryAllGui();
}
});
buttonEdit.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if(Edit==false){
Edit = true;
buttonEdit.setBackground(Color.CYAN);
System.out.println(1);
return;
}
if(Edit==true){
Edit = false;
buttonEdit.setBackground(c);
System.out.println(2);
return;
}
}
});
Toolbar.add(Changebutton);
Toolbar.add(buttonEdit);
return Toolbar;
}
public static void WorkDiaryAllGui(){
JPanel WorkDiaryAll = new JPanel();
WorkDiaryAll.add(Toolbar.Toolbar("Whole Diary"));
frameGui(WorkDiaryAll, "Whole Diary");
}
public static void frameGui(JPanel panel, String name){
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setContentPane(panel);
frame.setSize(1200,500);
frame.setVisible(true);
}
}
答案 0 :(得分:1)
每次调用Toolbar
时,都会向该按钮添加另一个侦听器。
在我调用它之后,它有一个监听器切换编辑模式(或者按钮应该做的任何事情)。
如果我再次调用它,它会返回一个新的JPanel,包含之前的相同按钮,现在有两个切换编辑模式的侦听器。当我单击该按钮时,它会切换两次编辑模式。
如果我再次打电话,它有三个听众。如果单击该按钮,则会切换编辑模式三次。等等。
我建议让Toolbar
(方法)在每次调用时创建全新的GUI对象。如果你这样做,Toolbar
(该类)不应该需要任何字段(至少在你问题的代码版本中)。
此外,通常的Java约定是使用小写字母开始方法名称 - 但是,这只是一个样式问题,并且不会阻止程序运行,因此如果需要,请更改它。
更严重的样式问题(但仍然只影响代码的可读性,而不是它是否有效) - 方法名称应描述它们的作用。是Toolbar
工具栏吗?我不认为它是工具栏,所以它不应该被命名为Toolbar
。 (类似地,WorkDiaryAllGui
不能用于日记所有GUI,frameGui
不构成GUI的框架。如果您需要其他样式提示,请考虑在https://codereview.stackexchange.com/上发布您的代码(一旦有效)。