Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 按下按钮时无法显示JOptionPane_Java_Swing_Jbutton_Joptionpane_Jtextpane - Fatal编程技术网

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教程。另请参见:。