如何使用内部ActionListener类向多个JButton和JTextfields添加操作?

时间:2012-03-28 01:17:06

标签: java class actionlistener

您好我的JButtons和JTextfields的功能有问题。 我想将多个按钮和文本字段添加到一个JComponent(=面板)但我似乎无法 在激活它们时获得任何结果。不执行打印方法。 我已经通过内部类将每个按钮链接到它的(打印)方法。添加 每个文本字段和按钮以及在动作监听器发生时定义每个元素 在不同的方法中,即activateButton& activateTextfield。

任何人都可以看到有什么问题吗?非常感谢任何帮助或建议!

顺便说一句,错误可能不是基于语法的,所有编译好的,只是在将代码放在论坛上时遇到了一些问题。

Import bla bla (everything is imported :)
public class Gui { every JButton, every JTextfield is defined as a field, panels and frame to


/**
 */
public Gui()
{
    makeFrame();
}

protected JComponent makeTextPanel(String text1, String text2) {
    String nieuwelijn = System.getProperty("line.separator");
    /**JPanel*/ panel = new JPanel(false);
    JLabel filler = new JLabel( "<html> + owyeah" + text1 + "<br>text2<br>text1<br>text2<br>text1</html>"); 
    filler.setHorizontalAlignment(JLabel.LEFT);
    filler.setVerticalAlignment(JLabel.TOP);
    panel.setLayout(new GridLayout(1, 1));
    panel.add(filler);

    return panel;}



 // define each created textfield as actionlistener and add it to the given panel
private void tekstveldActiveren(JTextField t , JComponent p)
{
      t.addActionListener(new Afhandelaar2());
      p.add(t);
}
// define each created textfield as actionlistener and add it to the given panel
private void knopActiveren(JButton k , JComponent p)
{
      k.addActionListener(new Afhandelaar1());
      p.add(k);
}


private void makeFrame()
{
    frame = new JFrame("Interface");
    frame.setSize(600, 300);

    JPanel contentPane = (JPanel)frame.getContentPane();
    contentPane.setBorder(new EmptyBorder(12, 12, 12, 12));
    makeMenuBar(frame);

    contentPane.setLayout(new BorderLayout(6, 6));

     JPanel centerPane = new JPanel();
      {
        centerPane.setLayout(new BorderLayout(8, 8));

        JTabbedPane tabbedPane = new JTabbedPane();

        JComponent panel1 = makeTextPanel("5","kamer 1");
        tabbedPane.addTab("kamer 1",panel1);

        JButton tabknop1 = new JButton("knop1");
        JButton tabknop2 = new JButton("knop1");
        JButton tabknop3 = new JButton("knop1");
        knopActiveren(tabknop1, panel1);
        knopActiveren(tabknop2, panel1);
        knopActiveren(tabknop3, panel1);

        JTextField tekstveld1 = new JTextField("0",5);
        JTextField tekstveld2 = new JTextField("0",5);
        JTextField tekstveld3 = new JTextField("0",5);
        tekstveldActiveren(tekstveld1 , panel1);
        tekstveldActiveren(tekstveld2 , panel1);
        tekstveldActiveren(tekstveld3 , panel1);

        JComponent panel2 = makeTextPanel("kamer 1","kamer 1");
        tabbedPane.addTab("kamer 2",panel2);

        JButton tabknop4 = new JButton("knop1");
        JButton tabknop5 = new JButton("knop1");
        JButton tabknop6 = new JButton("knop1");
        knopActiveren(tabknop4, panel2);
        knopActiveren(tabknop5, panel2);
        knopActiveren(tabknop6, panel2);

        JTextField tekstveld4 = new JTextField("0",5);
        JTextField tekstveld5 = new JTextField("0",5);
        JTextField tekstveld6 = new JTextField("0",5);
        tekstveldActiveren(tekstveld4 , panel2);
        tekstveldActiveren(tekstveld5 , panel2);
        tekstveldActiveren(tekstveld6 , panel2);

         JComponent panel3 = makeTextPanel("kamer 1","kamer 1");
         tabbedPane.addTab("kamer 3",panel3);

         JButton tabknop7 = new JButton("knop1");
         JButton tabknop8 = new JButton("knop1");
         JButton tabknop9 = new JButton("knop1");
         knopActiveren(tabknop7, panel3);
         knopActiveren(tabknop8, panel3);
         knopActiveren(tabknop9, panel3);

         JTextField tekstveld7 = new JTextField("0",5);
         JTextField tekstveld8 = new JTextField("0",5);
         JTextField tekstveld9 = new JTextField("0",5);
         tekstveldActiveren(tekstveld7 , panel3);
         tekstveldActiveren(tekstveld8 , panel3);
         tekstveldActiveren(tekstveld9 , panel3);

         centerPane.add(tabbedPane);

    }
    contentPane.add(centerPane, BorderLayout.CENTER);

    Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
    frame.setLocation(d.width/2 - frame.getWidth()/2, d.height/2 - frame.getHeight()/2);
    frame.setVisible(true);
}

}

    private class Afhandelaar1 implements ActionListener {     
    public void actionPerformed(ActionEvent g){   
        if(g.getSource()== tabknop1){System.out.println("tabknop 1");}
        else if(g.getSource()== tabknop2){System.out.println("tabknop 2");}
        else if(g.getSource()== tabknop3){System.out.println("tabknop 3");}
        else if(g.getSource()== tabknop4){System.out.println("tabknop 4");}
        else if(g.getSource()== tabknop5){System.out.println("tabknop 5");}
        else if(g.getSource()== tabknop6){System.out.println("tabknop 6");}
        else if(g.getSource()== tabknop7){System.out.println("tabknop 7");}
        else if(g.getSource()== tabknop8){System.out.println("tabknop 8");}
        else if(g.getSource()== tabknop9){System.out.println("tabknop 9");}
    }
   }

  private class Afhandelaar2 implements ActionListener {
        public void actionPerformed(ActionEvent h)
     {
      if(h.getSource()== tekstveld1) {System.out.println(conversieMethode(tekstveld1));}
      else if(h.getSource()== tekstveld2){System.out.println(conversieMethode(tekstveld2));}
      else if(h.getSource()== tekstveld3){System.out.println(conversieMethode(tekstveld3));}
      else if(h.getSource()== tekstveld4){System.out.println(conversieMethode(tekstveld4));}
      else if(h.getSource()== tekstveld5){System.out.println(conversieMethode(tekstveld5));}
      else if(h.getSource()== tekstveld6){System.out.println(conversieMethode(tekstveld6));}
      else if(h.getSource()== tekstveld7){System.out.println(conversieMethode(tekstveld7));}
      else if(h.getSource()== tekstveld8){System.out.println(conversieMethode(tekstveld8));}
      else if(h.getSource()== tekstveld9){System.out.println(conversieMethode(tekstveld9));}

    }

  }


}

1 个答案:

答案 0 :(得分:0)

您应该转换actionlistener.getSource方法的结果,然后根据您的属性与其他组件进行比较。例如,如果在您的面板中,每个jTextField都有唯一文本,您可以执行以下操作:

public void actionPerformed(ActionEvent h){
     if (((JTextField) h.getSource()).getText().equals(tekstveld1.getText())){  
           System.out.println(conversieMethode(tekstveld1));
     }
     ...
}

当然,您可以根据文本旁边的其他属性进行比较。

希望有所帮助。