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

时间:2013-08-01 09:12:03

标签: java swing jframe jbutton actionlistener

我有这个带有按钮的JFrame 我添加了ActionPerformed的添加工作,就像它所使用的那样 但我的一个按钮执行一个长代码,我想将它移动到一个单独的类,然后将其导入AP()。

有可能吗? (含义按钮名称,JButton东西......)。

public class Frame扩展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:我的服务器或Minecraft新闻)

我想要的是if(e.getSource() == TP)中的所有代码都在一个单独的类中(称为News_TechPack)

2 个答案:

答案 0 :(得分:1)

请记住,我使用的是Main类而不是Frame类。你也可以使用你的。另外,请考虑不将您的行为写入单独的类,而只是写入Frame类中的函数。在这个例子中,您应该能够自己编写函数。

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

答案 1 :(得分:0)

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