1

我得到了这个带有按钮的 JFrame。
我添加了 ActionPerformed add 就像它应该做的那样。
但是我的一个按钮执行了很长的代码,我想将它移到一个单独的类中,然后将其导入 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:我的服务器或 Minecraft 新闻)

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

4

2 回答 2

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
    }
}
于 2013-08-01T11:15:50.140 回答
0

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

于 2013-08-01T09:19:57.967 回答