简体   繁体   中英

Import code from another class in ActionPerformed

I got this JFrame with buttons on it.
I added the ActionPerformed add works like it suposed to.
But one of my buttons performs a long code and I would like to move it to a seperate class and then import it to the AP().

Is it possible? (Meaning with the button names, JButton stuff......).

public class Frame extends 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);
        }

}

Ok, so this the Frame class (I left only the code of the buttons concerned).

When the News button will show these TP and MC buttons.

When one of these are clicked, it will show up the news (here TechPack: My server or Minecraft news)

What I would like is all that code in if(e.getSource() == TP) is in a seperate class (called News_TechPack)

Keep in mind, that I use this Main class instead of your Frame class. You could also use yours. Also consider not to write your behaviour into a seperate class but just into functions in your Frame class. With this example you should be able to write your functions yourself.

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
    }
}

If you mean 'import' as a sort of automatic 'copy&paste' I think you can (maybe your IDE allow it, but is a custom IDE feature, not a language feature). Instead refactor your code: move long code to new class (or method) and pass all necessary parameter (at least JFrame as unique parameter). Is a bit trivial as solution, but can work.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM