java - JButton ActionListener 不起作用(在 Eclipse 插件中)

标签 java swing jpanel jbutton actionlistener

<小时/>

问题已解决:我混淆了 windowbuilder的快速测试/预览按钮与eclipse的编译按钮:

enter image description here (只是通过“不小心”将鼠标停在按钮上并发现它无法编译才发现)

<小时/>

原始问题

我有一个非常具体的问题:

我有两个不同的类(class):

  • 类 1 在 JFrame 中实现 JPanel。

  • Class 2 仅实现 JFrame。

在第 2 类中,以下代码可以完美运行:

import java.awt.BorderLayout;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JButton;
import javax.swing.JTextField;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.JTextPane;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;

public class frameTest extends JFrame {

private JPanel contentPane;
private JTextField txtGeefLiefde;

/**
 * Launch the application.
 */
public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
        public void run() {
            try {
                frameTest frame = new frameTest();
                frame.setVisible(true);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
}

/**
 * Create the frame.
 */
public frameTest() {
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setBounds(100, 100, 450, 300);
    contentPane = new JPanel();
    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
    setContentPane(contentPane);
    contentPane.setLayout(null);

    JButton btnTest = new JButton("press");

    btnTest.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            testFunction();
        }
    });
    btnTest.setBounds(162, 188, 89, 23);
    contentPane.add(btnTest);

}

public void testFunction()
{
    JTextPane textPane = new JTextPane();
    textPane.setBounds(162, 231, 89, 20);
    textPane.setText(":)");
    contentPane.add(textPane);
}

}

现在我想在 Class 1 中实现完全相同的功能。

我尝试了以下方法:

    import java.awt.event.MouseAdapter;
    import java.awt.event.ActionListener;
    import java.awt.event.ActionEvent;
    import java.awt.event.MouseEvent;

    public class frontpanel extends JFrame {

    private JPanel panel;

/**
 * Launch the application.
 */
public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
        public void run() {
            try {
                frontpanel frame = new frontpanel();
                frame.setVisible(true);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
}

/**
 * Create the frame.
 */
public frontpanel() {

            JButton btnTest = new JButton("press");

            btnTest.addActionListener(new ActionListener() {
                   public void actionPerformed(ActionEvent e) {

                        testFunction();

                   }
            });
            btnTest.setBounds(162, 188, 89, 23);
            panel.add(btnTest);
    }
        public void testFunction()
        { 
        JTextPane textPane = new JTextPane();
        textPane.setBounds(162, 231, 89, 20);
        textPane.setText(":)");
        panel.add(textPane);
        }
    }

其中 panel 是 JFrame 中的 JPanel。

我已经在这个问题上坚持了几个小时了。我似乎无法让任何 ActionListener 工作。是什么导致了这个问题?

非常感谢所有帮助!

最佳答案

给出下面稍微修改的代码以适合我的代码测试用例,添加panel初始化并将其添加到Test框架,您提到的是复制/粘贴错误,具有易于测试的维度,代码在我这边运行良好。

import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextPane;

public class Test extends JFrame {

  private JPanel panel = new JPanel();

/**
 * Launch the application.
 */
   public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
  public void run() {
    try {
          Test frame = new Test();
          frame.setVisible(true);
        } catch (Exception e) {
          e.printStackTrace();
        }
      }
    });
  }

  /**
   * Create the frame.
   */
  public Test() {
    this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
    JButton btnTest = new JButton("press");

    btnTest.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {

        testFunction();
      }
    });

    btnTest.setBounds(162, 188, 89, 23);
    panel.add(btnTest);
    this.setSize(new Dimension(300, 300));
    this.add(panel);
  }

  public void testFunction()
  { 
    JTextPane textPane = new JTextPane();
    textPane.setBounds(162, 231, 89, 20);
    textPane.setText(":)");
    panel.add(textPane);
  }
}

关于java - JButton ActionListener 不起作用(在 Eclipse 插件中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18366136/

相关文章:

java - 图像翻转不起作用

java - 在 GUI 构建器中重新验证 JPanel

java - 根据用户输入在 for 循环中创建带有标题边框的 JPanel

java.lang.NoSuchMethodException : Unknown property 'language' on class 'class java.lang.Class'

java - 使用 guice 注入(inject) Class<T>

java - RMI:将非远程对象类传递到服务器

java - 使用 fireTableRowsInserted(int,int) 更新模型和 JTable

java - 为什么 swing GUI 表单生成器不生成二进制类文件/java 源代码?

java - 组件未添加到JPanel对象

java - Android - 带有待处理 Intent 的多个警报,如何确定正在调用哪个 Intent ?