Java 从ActionPerformed中的另一个类导入代码

Java 从ActionPerformed中的另一个类导入代码,java,swing,jframe,jbutton,actionlistener,Java,Swing,Jframe,Jbutton,Actionlistener,我买了这个带按钮的JFrame。 我添加了ActionPerformed,添加了它所支持的工作。 但是我的一个按钮执行一个长代码,我想将其移动到一个单独的类,然后将其导入AP() 可能吗?(意思是按钮名称,JButton之类的东西……) 公共类框架扩展了JFrame{ /* -------------------------------------------------------------------- */ public JButton News; public boolea

我买了这个带按钮的JFrame。
我添加了ActionPerformed,添加了它所支持的工作。
但是我的一个按钮执行一个长代码,我想将其移动到一个单独的类,然后将其导入AP()

可能吗?(意思是按钮名称,JButton之类的东西……)

公共类框架扩展了JFrame{

/* -------------------------------------------------------------------- */

public JButton News;

    public boolean TP_B = false,
               MC_B = false;

public JEditorPane TechPack_JEP,
                   Minecraft_JEP;

public JScrollPane TechPack_JSP,
                   Minecraft_JSP;

public void News_Button(){
    Icon News_img = new ImageIcon(this.getClass().getResource("/onglet/News.png"));
    Icon News_select_img = new ImageIcon(this.getClass().getResource("/onglet/News_Select.png"));

    News = new JButton(News_img);
    News.setRolloverIcon(News_select_img);
    News.setOpaque(false);
    News.setContentAreaFilled(false);
    News.setBorderPainted(false);
    News.setFocusPainted(false);

    Insets insets_1 = News.getInsets();
    Dimension size_1 = News.getPreferredSize();
    News.setBounds(-34 + insets_1.left, -10 + insets_1.top, size_1.width, size_1.height); // Do not complain about the setbounds (I use it for a specefic reason)

    add(News);
    News.addActionListener(this);
}

public void TP_Button(){
    Icon TP_img = new ImageIcon(this.getClass().getResource("/onglet/TP.png"));
    Icon TP_Select_img = new ImageIcon(this.getClass().getResource("/onglet/TP_Select.png"));

    TP = new JButton(TP_img);
    TP.setRolloverIcon(TP_Select_img);
    TP.setOpaque(false);
    TP.setContentAreaFilled(false);
    TP.setBorderPainted(false);
    TP.setFocusPainted(false);

    Insets insets_6 = TP.getInsets();
    Dimension size_6 = TP.getPreferredSize();
    TP.setBounds(50+ insets_6.left, -10 + insets_6.top, size_6.width, size_6.height);

    add(TP);
    TP.setVisible(false);
    TP.addActionListener(this);

}

public void MC_Button(){
    Icon MC_img = new ImageIcon(this.getClass().getResource("/onglet/MC.png"));
    Icon MC_select_img = new ImageIcon(this.getClass().getResource("/onglet/MC_Select.png"));

    MC = new JButton(MC_img);
    MC.setRolloverIcon(MC_select_img);
    MC.setOpaque(false);
    MC.setContentAreaFilled(false);
    MC.setBorderPainted(false);
    MC.setFocusPainted(false);

    Insets insets_7 = MC.getInsets();
    Dimension size_7 = MC.getPreferredSize();
    MC.setBounds(148+ insets_7.left, -10 + insets_7.top, size_7.width, size_7.height);

    add(MC);
    MC.setVisible(false);
    MC.addActionListener(this);

}

public Frame(){
    super("Multi Launcheur");
    setLayout(null);

    News_Button();  
    TP_Button();
    MC_Button();

}


    public void actionPerformed(ActionEvent e){

        if(e.getSource() == TP){
            System.out.println("TP");

            TP_B = true;

            if(MC_B == true){
                Minecraft_JSP.setVisible(false);
            }

            TechPack_JEP = new JEditorPane();
            TechPack_JEP.setEditable(false);
            TechPack_JEP.setBorder(null);
            try {
                TechPack_JEP.setPage("http://www.techpackcreator.tumblr.com/");
            } catch (IOException error) {
                TechPack_JEP.setContentType("text/html");
                System.out.println("ERROR");
            }   
            TechPack_JSP = new JScrollPane(TechPack_JEP);
            TechPack_JSP.setBounds(67, 27, 798, 465);
            TechPack_JSP.getVerticalScrollBar().setUnitIncrement(10);

            add(TechPack_JSP);
        }
        if(e.getSource() == MC){
            System.out.println("MC");
            MC_B = true;

            if(TP_B == true){
                TechPack_JSP.setVisible(false);
            }

            Minecraft_JEP = new JEditorPane();
            Minecraft_JEP.setEditable(false);
            Minecraft_JEP.setBorder(null);

            try {
                Minecraft_JEP.setPage("http://www.mcupdate.tumblr.com/");
            } catch (IOException error) {
                Minecraft_JEP.setContentType("text/html");
            }   
            Minecraft_JSP = new JScrollPane(Minecraft_JEP);
            Minecraft_JSP.setBounds(67, 27, 798, 465);
            Minecraft_JSP.getVerticalScrollBar().setUnitIncrement(10);

            add(Minecraft_JSP);
        }

}
好的,这是Frame类(我只留下了相关按钮的代码)

当新闻按钮将显示这些TP和MC按钮时

单击其中一个按钮时,将显示新闻(此处为TechPack:My server或Minecraft新闻)


我想要的是
中的所有代码,如果(e.getSource()==TP)
在一个单独的类中(称为News\u TechPack)

如果您的意思是将“导入”作为一种自动的“复制和粘贴”,我想您可以(也许您的IDE允许它,但它是一个自定义IDE功能,而不是语言功能)。 相反,重构代码:将长代码移动到新类(或方法)并传递所有必要的参数(至少JFrame作为唯一参数)。
作为一种解决方案,它有点微不足道,但可以工作。

如果您是说“导入”是一种自动的“复制和粘贴”,我想您可以(也许您的IDE允许它,但它是一种自定义IDE功能,而不是语言功能)。 相反,重构代码:将长代码移动到新类(或方法)并传递所有必要的参数(至少JFrame作为唯一参数)。
记住,我使用这个主类代替你的框架类。你也可以使用你的类。也不要把你的行为写进一个单独的类,而是把你的行为写进你的框架类中。用这个例子你应该能够自己编写函数。
public class Main implements ActionListener{

    JFrame f;
    JButton button;

    boolean TP_B = false;

    ButtonBehaviour bb;

    public Main()
    {
        bb = new ButtonBehaviour(this);
        f = new JFrame();

        f.setSize(400,400);
        f.setLocationRelativeTo(null);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        button = new JButton("Test");

        button.addActionListener(this);
        f.add(button);


        f.setVisible(true);
    }

    public static void main(String[] args) throws IOException {
        new Main();
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        if(e.getSource() == button)
        {
            System.out.println("Call the specific function in your behaviour class");
            bb.buttonBehaviour();
        }

    }


}

class ButtonBehaviour{

    Main m;

    public ButtonBehaviour(Main pMain)
    {
        m = pMain;
    }

    public void buttonBehaviour()
    {
         System.out.println("TP");

         m.TP_B = true;

         //Write here your rest behaviour.
         //Keep in mind to use your Main instance or Frame instance
         //for calling and changing your specific variables.
         //you could also just create your
         //buttonBehaviour-Functions in your Frame class. Would
         //be easier
    }
}

记住,我使用这个主类而不是你的框架类。你也可以使用你的类。也不要把你的行为写进一个单独的类,而是把你的行为写进你的框架类中。用这个例子你应该能够自己编写函数。

public class Main implements ActionListener{

    JFrame f;
    JButton button;

    boolean TP_B = false;

    ButtonBehaviour bb;

    public Main()
    {
        bb = new ButtonBehaviour(this);
        f = new JFrame();

        f.setSize(400,400);
        f.setLocationRelativeTo(null);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        button = new JButton("Test");

        button.addActionListener(this);
        f.add(button);


        f.setVisible(true);
    }

    public static void main(String[] args) throws IOException {
        new Main();
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        if(e.getSource() == button)
        {
            System.out.println("Call the specific function in your behaviour class");
            bb.buttonBehaviour();
        }

    }


}

class ButtonBehaviour{

    Main m;

    public ButtonBehaviour(Main pMain)
    {
        m = pMain;
    }

    public void buttonBehaviour()
    {
         System.out.println("TP");

         m.TP_B = true;

         //Write here your rest behaviour.
         //Keep in mind to use your Main instance or Frame instance
         //for calling and changing your specific variables.
         //you could also just create your
         //buttonBehaviour-Functions in your Frame class. Would
         //be easier
    }
}

请告诉我们您的尝试请告诉我们您的尝试