2012-03-28 59 views
0

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

任何人都可以看到什么是错的?任何帮助或建议非常感谢!

顺便说一句,错误可能不是基于语法,编译的一切,只是有一些问题把代码放在论坛上。

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

为了更快提供更好的帮助,请发布[SSCCE](http://sscce.org/)。另外,使用英文属性和方法名称的源代码会很有帮助。 – 2012-03-28 01:46:16

回答

0

你应该投的actionlistener.getSource方法的结果,然后比较基于您的属性的其他组件。例如,如果你的面板,每一个JTextField中具有独特的文本,你可以做这样的事情:

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

当然,你可以比较基于文本旁边的其他属性。

希望有所帮助。

+0

谢谢,但想法是,每个字段可能包含一个值不必是唯一的,它们实际上只是每个时间一个整数值的简单输入字段。 – 2012-03-28 09:29:31

+0

您可以使用.hashCode()函数,它返回每个对象的int唯一值。 – Rorchackh 2012-03-28 17:54:18

相关问题