您好我的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));}
}
}
}
答案 0 :(得分:0)
您应该转换actionlistener.getSource方法的结果,然后根据您的属性与其他组件进行比较。例如,如果在您的面板中,每个jTextField都有唯一文本,您可以执行以下操作:
public void actionPerformed(ActionEvent h){
if (((JTextField) h.getSource()).getText().equals(tekstveld1.getText())){
System.out.println(conversieMethode(tekstveld1));
}
...
}
当然,您可以根据文本旁边的其他属性进行比较。
希望有所帮助。