簡體   English   中英

從單獨的 JFrame 類到主類使用 ActionListener 對象

[英]Utilize a ActionListener object from a separate JFrame class to main class

我正在構建一個 GUI 程序,當特定條件(按下 JButton)時,特定代碼就會發生。 我有一個單獨的類來構造我的 Jframe,稱為“MyFrame”。

本質上,我想知道在按下 JButton 時結合使用我的“MyFrame”類中的 ActionListener/ActionEvent 的正確方法,它會在主類中正確關聯。

例如,當我的 MyFrame 類中的 JButton 被按下時,我可以通過 Myframe 類中 java 提供的 actionPerformed 方法啟動特定代碼,我只是對如何通過我的主類也能使同樣的事情起作用感到困惑。

任何援助將不勝感激

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

public class Main {

    public static void main(String[] args) {
        MyFrame mf;

        mf= new MyFrame();
        Expenses exp ;
        BudgetSystem system ;
        ActionEvent e ;
    }
}

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

 class MyFrame extends JFrame implements ActionListener {
    JFrame myFrame; 
    JPanel myPanel; 
    JLabel greetText ; 
    JButton addReportButton;
    JButton exitButton;

    ActionListener event ; 
    BorderLayout layout ; 

    MyFrame() {
        myFrame = new JFrame();
        myPanel = new JPanel();
        greetText = new JLabel();
        addReportButton = new JButton();
        exitButton = new JButton();

        myPanel.setBorder(null);
        myFrame.setPreferredSize(new Dimension(400,300));
        greetText.setText("Please choose one of the following options to begin:" );
        myPanel.add(greetText);
        myFrame.add(myPanel);
        addReportButton.setText("Add a budget report");
        addReportButton.addActionListener(this);
        myPanel.add(addReportButton);
        exitButton.setText("Close Program");
        exitButton.addActionListener(this);
        myPanel.add(exitButton);
        myFrame.setVisible(true);
        myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        myFrame.setLocationRelativeTo(null);
        myFrame.pack();
    }


    @Override
    public void actionPerformed(ActionEvent e) {
        /*
        if (e.getSource()==addReportButton)
        {
            JOptionPane.showMessageDialog(myFrame,"This button Works!");
        }
        else if (e.getSource()== dummyButton)
        {
            JOptionPane.showMessageDialog(myFrame,"This is the dummy button ! , you are targeting specific buttons now ! ... YOU ROCK :) ");
        }else
        JOptionPane.showMessageDialog(myFrame,"This is does not work :( ");

         */
    }
}

我試圖在 main 中創建一個特定的 ActionEvent 對象,但沒有正常工作。

我還嘗試使用 MyFrame 對象訪問 java 中的 actionPerformed 方法,但這似乎也不起作用。

如果您的目標是從另一個類向 JButton 添加偵聽器,一個選擇是為持有 JButton 的類提供一個公共方法以允許發生這種情況,例如:

public void addMyButtonListener(ActionListener listener) {
    myButton.addActionListener(listener);
}

這將允許持有類的實例的任何對象調用此方法並傳入偵聽器,該類包含 JButton。

例如:

import java.awt.Dimension;
import java.awt.event.ActionListener;

import javax.swing.*;

public class AddOutsideActionListener {
    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> {
            SomeGUI mainPanel = new SomeGUI();
            mainPanel.addMyButtonListener(e -> {
                String message = "Message from the main method";
                String title = "Message";
                int type = JOptionPane.PLAIN_MESSAGE;
                JOptionPane.showMessageDialog(mainPanel, message, title, type);
            });

            JFrame frame = new JFrame("Some GUI");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.add(mainPanel);
            frame.pack();
            frame.setLocationRelativeTo(null);
            frame.setVisible(true);
        });
    }

}
class SomeGUI extends JPanel {
    public static final int PREF_W = 600;
    public static final int PREF_H = 400;
    private JButton myButton = new JButton("My Button");
    
    public SomeGUI() {
        add(myButton);
        setPreferredSize(new Dimension(PREF_W, PREF_H));
    }
    
    public void addMyButtonListener(ActionListener listener) {
        myButton.addActionListener(listener);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM