【问题标题】:How do I create a JButton solely on one pane that prints "Hello如何仅在一个打印“你好”的窗格上创建一个 JButton
【发布时间】: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


【解决方案1】:

要检测点击,您需要添加 MouseListener 而不是 ChangeListener

像这样

import java.awt.Color;
import javax.swing.*; 
import java.awt.*; 
import javax.swing.event.ChangeEvent; 
import javax.swing.event.ChangeListener;  
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;

public class SwingDemo extends JFrame    { 
   public static void main(String args[]) { 

JFrame frame = new JFrame("Encryption/Decryption Software");

    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.addMouseListener(new MouseListener() {
        @Override
        public void mouseClicked(MouseEvent e) {
            System.out.println("Hello");
        }

        @Override
        public void mousePressed(MouseEvent e) {
        }

        @Override
        public void mouseReleased(MouseEvent e) {
        }

        @Override
        public void mouseEntered(MouseEvent e) {
        }

        @Override
        public void mouseExited(MouseEvent e) {
        }
    });
}

【讨论】:

  • 它给了我这个:错误:找不到符号 tabbedPane.addMouseListener(new MouseListener() { ^
  • 您需要将 tabbedPane 替换为您想要的对象,还是您还导入了使用 mouseListener 的库?
  • 缺少一个库,谢谢!但是现在还有最后一个问题......当按下“加密”按钮时,如何让它打印“Hello”......我把这段代码 Public void actionPerformed(ActionEvent e) { if(e.getActionCommand() == "加密"){ System.out.println("你好"); } } ...inside mouseClicked 最后,它说错误:表达式的非法开始 public void mousePressed(MouseEvent e) {
  • 不用加 if(e.getActionCommand){} 不用加也可以
  • 错误:非法开始表达式 public void actionPerformed(ActionEvent e) { ^ 这仍然发生...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-03-27
  • 1970-01-01
  • 1970-01-01
  • 2023-04-11
  • 1970-01-01
  • 2023-03-24
  • 2016-06-02
相关资源
最近更新 更多