Java 按下按钮时无法显示JOptionPane
因此,我有以下代码:Java 按下按钮时无法显示JOptionPane,java,swing,jbutton,joptionpane,jtextpane,Java,Swing,Jbutton,Joptionpane,Jtextpane,因此,我有以下代码: import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JOptionPane; import javax.swing.JP
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextPane;
@SuppressWarnings("serial")
public class Window extends JPanel implements ActionListener {
public static JTextPane text = new JTextPane();
public static BorderLayout layout = new BorderLayout();
public static JButton debug = new JButton("Debug");
public static boolean isDebugPressed = false;
public static JFrame frame = new JFrame();
public Window(){
debug.addActionListener(this);
this.setLayout(layout);
this.add(debug,BorderLayout.NORTH);
this.add(text,BorderLayout.CENTER);
}
public static void main(String[] args){
Window window = new Window();
frame.setLayout(layout);
frame.setSize(new Dimension(600,600));
frame.setTitle("QuickScript Compiler");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setResizable(false);
frame.setVisible(true);
frame.setLocationRelativeTo(null);
frame.add(window);
debug.setActionCommand("debug");
if (isDebugPressed){
JOptionPane.showMessageDialog(frame, "Output: " + text.getText().toString() , "Debugging", JOptionPane.PLAIN_MESSAGE);
}
}
@Override
public void actionPerformed(ActionEvent e) {
if (e.getActionCommand().equals("debug")){
isDebugPressed = true;
System.out.println("true");
}
}
当我按下debug按钮时,会弹出一个框,显示我在文本窗格中键入的内容,但没有显示任何内容。我该如何解决这个问题?我有一种感觉,我可能错过了一些非常重要的东西,但我就是不知道它是什么。谢谢任何能帮忙的人:D
//if (isDebugPressed){
JOptionPane.showMessageDialog(frame, "Output: " + text.getText().toString() , "Debugging", JOptionPane.PLAIN_MESSAGE);
需要将显示选项窗格的代码添加到ActionListener
创建GUI时,变量isDebugPressed为false,并且该语句不再执行
此外,由于ActionListener仅添加到Debug按钮,因此不需要设置操作命令并在ActionListener中检查该命令。“源”按钮将始终是“调试”按钮,因此您可以仅显示选项窗格
需要将显示选项窗格的代码添加到ActionListener
创建GUI时,变量isDebugPressed为false,并且该语句不再执行
此外,由于ActionListener仅添加到Debug按钮,因此不需要设置操作命令并在ActionListener中检查该命令。“源”按钮将始终是“调试”按钮,因此您可以只显示选项窗格。哇,谢谢!出于某种原因,我试图使用布尔值,但我甚至没有想到直接把它放在那里。我想得太多了,谢谢你的回答@camickr@user2449865,也不要在类中使用静态变量。它们有什么问题?正如我所记得的,静态变量是在超出范围时不会被破坏的变量,并且不应该改变。使用它们有什么坏处吗@您正在描述的CAMICkr是实例变量,这是您应该使用的。此外,实例变量不应该是公共的。他们应该是私人的。类中的任何方法仍然可以访问它们。如果需要访问类之外的变量,那么应该创建一个“getter”方法。静态变量意味着仅为同一类型的所有类创建一个变量实例。请参阅上的Swing教程以获得更好的描述。另请参阅:。哇,谢谢!出于某种原因,我试图使用布尔值,但我甚至没有想到直接把它放在那里。我想得太多了,谢谢你的回答@camickr@user2449865,也不要在类中使用静态变量。它们有什么问题?正如我所记得的,静态变量是在超出范围时不会被破坏的变量,并且不应该改变。使用它们有什么坏处吗@您正在描述的CAMICkr是实例变量,这是您应该使用的。此外,实例变量不应该是公共的。他们应该是私人的。类中的任何方法仍然可以访问它们。如果需要访问类之外的变量,那么应该创建一个“getter”方法。静态变量意味着仅为同一类型的所有类创建一个变量实例。有关更好的说明,请参见上的Swing教程。另请参见:。