<小时/>
问题已解决:我混淆了 windowbuilder的快速测试/预览按钮与eclipse的编译按钮:
(只是通过“不小心”将鼠标停在按钮上并发现它无法编译才发现)
<小时/>原始问题
我有一个非常具体的问题:
我有两个不同的类(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/