Thi*_*zar 4 java events swing communication class
我有一个带有Editor类(带有JTextPane)和Toolbar类的主类(带有JList和Jbutton,我不想使用JToolBar).这两个类由许多组件组成,我不想将它们混合到同一个类中.我希望编辑器和工具栏进行通信.假设我在工具栏中写了"Hello",然后点击Submit.我希望文本窗格显示"Hello".我用这种方式构建类:
public class Main{
public MainGUI(){
initComponents();
}
private void initComponents(){
JFrame mainframe=new JFrame("Main Frame");
Editor editor=new Editor();
Toolbar toolbar=new Toolbar();
mainframe.getContentPane().setLayout(new BorderLayout());
mainframe.getContentPane().add(editor, BorderLayout.CENTER);
mainframe.getContentPane().add(toolbar, BorderLayout.NORTH);
mainframe.setVisible(true);
}
}
public class Editor extends JPanel{
public Editor(){
super();
initComponents();
}
private void initComponents(){
JTextPane textpane=new JTextPane();
this.setLayout(new BorderLayout());
this.add(textpane, BorderLayout.CENTER);
}
}
public class Toolbar extends JPanel{
public Toolbar(){
super();
initComponents();
}
private void initComponents(){
JTextField textfield=new JTextField();
JButton submitbutton=new JButton("Submit");
this.setLayout(newFlowLayout());
this.add(textfield);
this.add(submitbutton);
}
}
Run Code Online (Sandbox Code Playgroud)
我应该如何在工具栏和编辑器之间实现事件处理?
您可以创建一个界面 ValueSubmittedListener
interface ValueSubmittedListener {
public void onSubmitted(String value);
}
Run Code Online (Sandbox Code Playgroud)
并Editor实现它.
class Editor implements ValueSubmittedListener{
...
public void onSubmitted(String value) {
// add text to JTextPane.
}
}
Run Code Online (Sandbox Code Playgroud)
然后Toolbar提供方法
class Toolbar {
private List<ValueSubmittedListener> listeners = new ArrayList<ValueSubmittedListener>();
public void addListener(ValueSubmittedListener listener) {
listeners.add(listener);
}
private void notifyListeners() {
for (ValueSubmittedListener listener : listeners) {
listener.onSubmitted(textfield.getText());
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后每当你需要向Editor发送新值时(即:in submitButtons ActionListener),只需调用该方法即可notifyListeners.
更新:
我忘了提及的是,在initComponents中Main,你必须注册Editor到Toolbar:
private void initComponents() {
JFrame mainframe = new JFrame("Main Frame");
Editor editor = new Editor();
Toolbar toolbar = new Toolbar();
toolbar.addListener(editor); // register listener
...
}
Run Code Online (Sandbox Code Playgroud)