gpt4 book ai didi

Java - 可重用按钮操作处理程序概念问题

转载 作者:行者123 更新时间:2023-12-02 16:15:35 24 4
gpt4 key购买 nike

首先 - 对代码墙感到抱歉,但它并不太可怕,只是我试图解释的一个框架。它运行没有错误。

目标

我正在为我的 GUI 创建一个可重用的按钮类,每个按钮对象在单击时都需要有一个不同的处理程序。我想为每个新按钮分配一个 ClickHandler 对象。然后,按钮将在处理程序上调用 init() 并继续运行。不幸的是,存在输入问题,因为每个处理程序类都有不同的名称。

当前进度

现在,处理程序的类型为 HandlerA,但我想让它处理任何名称,例如“SettingsHandler”或“GoToTheWahWah”等。

我尝试过使用泛型类型,但由于我是新手,并且具有 Webdev 背景,因此我一直在克服一个概念障碍。这是解决问题的正确方法吗?

代码

ReuseableButton.java 是一个可重用的类,唯一改变的是单击时的操作:

package gui;

import java.awt.event.*;
import java.awt.*;
import javax.swing.*;

public class ReuseableButton extends JButton implements ActionListener {
private static final long serialVersionUID = 1L;

// I want a generic type here, not just HandlerA!
private HandlerA ClickHandler;

// Assemble generic button
public ReuseableButton(Container c, String s) {
super(s);
addActionListener(this);
c.add(this);
}

// Once again, generic type, not just HandlerA!
public void SetClickHandler(HandlerA ch) {
ClickHandler = ch;
}

// Call init() from whatever class has been defined as click handler.
public void actionPerformed(ActionEvent e) {
ClickHandler.init();
}
}

Controller.java 触发框架并根据需要组装按钮(现在只有一个按钮)。

package gui;
import javax.swing.*;
import java.awt.*;

public class Controller extends JFrame {
private static final long serialVersionUID = 1L;


public Controller() {
JFrame frame = new JFrame("Handler Test GUI");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

Container pane = frame.getContentPane();
pane.setLayout(new FlowLayout());

ReuseableButton b = new ReuseableButton(pane,"Reuseable Button A");
// THE QUESTION IS HERE: Pass a generic object?
b.SetClickHandler(new HandlerA());

frame.pack();
frame.setSize(200,200);
frame.setVisible(true);
}

public static void main(String args[]) {
new Controller();
}
}

HandlerA.java 是按钮单击的随机处理程序示例。稍后,可能会有 HandlerBHandlerC 等。

package gui;

// A random handler
public class HandlerA {
public void init() {
System.out.println("Button clicked.");
}
}

提前非常感谢!

最佳答案

所有处理程序都应该实现类似 Clickable 之类的接口(interface)。这样接口(interface)就指定了 init 函数的存在:

public interface Clickable 
{
public void init();
}

定义 HandlerA:

public class HandlerA implements Clickable {
public void init() {
System.out.println("Button clicked.");
}
}

关于Java - 可重用按钮操作处理程序概念问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6805523/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com