【发布时间】:2021-01-27 20:47:10
【问题描述】:
每次我尝试这样做时,它都会给我一个错误“更改侦听器无法转换为动作侦听器”,即使我将 ActionListener 实现到类......它仍然给我另一个错误
有没有办法只在“加密”窗格上创建一个 JButton,按下时会打印“Hello”
这是我的代码:
import javax.swing.*;
import java.awt.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
public class SwingDemo extends JFrame {
public static void main(String args[]) {
JFrame frame = new JFrame("Encryption/Decryption Software");
JTabbedPane tabbedPane = new JTabbedPane();
JPanel panel1, panel2;
panel1 = new JPanel();
panel2 = new JPanel();
tabbedPane.setBackground(Color.blue);
tabbedPane.setForeground(Color.white);
tabbedPane.addTab("Encryption", panel1);
tabbedPane.addTab("Decryption ", panel2);
frame.add(tabbedPane);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setBounds(200,170, 500,250);
frame.setVisible(true);
tabbedPane.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent e) {
if(tabbedPane.getSelectedIndex() == 0){
panel1.removeAll();
panel1.setLayout(null);
JLabel initial_text = new JLabel("Enter text to be encrypted:");
JLabel final_text = new JLabel("Final text:");
JLabel key = new JLabel("Key:");
JTextField text_field = new JTextField(100);
JTextField key_field = new JTextField(100);
panel1.add(initial_text);
panel1.add(final_text);
panel1.add(key);
panel1.add(text_field);
panel1.add(key_field);
initial_text.setBounds(10, 20, 300, 50);
final_text.setBounds(10, 150, 600, 50);
key.setBounds(10, 58, 300, 50);
text_field.setBounds(178, 30, 230, 30);
key_field.setBounds(38, 72, 36, 25);
}
}
});
}
}
【问题讨论】:
-
您能否详细说明您的
JButton到底有什么问题?我在这里没有看到,我也无法理解你的解释。你也可以改变你的方法,因为现在,面板及其内容是在 changelistener 中定义的。因此,在启动时,最初选择的选项卡不会加载内容。因此,您可能应该初始化所有内容并仅重置选项卡更改上的所有字段。 -
它给了我一个错误“更改侦听器无法转换为动作侦听器” - 所以不要向按钮添加 ChangeListener。您需要使用
addActionListener()方法将ActionListener添加到按钮。 -
我赞同@maloomeister 的评论。在让用户可见之前创建整个 GUI,然后在 ActionListener 中更新 GUI 的内容。
-
@maloomeister 如果我有一个按钮,我只能用 ChangeListener 来完成它,它不允许我点击它
标签: java swing user-interface jbutton jtabbedpane