Buttons über Textfeld beschriften

core_85

Mitglied
Hallo,

hab kleines Problem und zwar das ich Buttons umbenenne über ein neues erstelltes Textfeld.

Das Problem ist das er nicht den Button umbenennt der gedrückt wurde , sondern der Button den ihm angebe. In dem Fall bu[0] wird umbenannt. Danke

Java:
try {
					/**/	
			   
			   		System.out.println(GUI_backend.txt[1].getText() + "getext()");
			   			
					   int intern1 = Integer.parseInt(GUI_backend.txt[1].getText());
					   
					  			   
					    					  				   
					   final JButton bu[] = new JButton[intern1];
						  
						  for (int j = 0; j < intern1; j++) {
							  final JFrame btn_frame = new JFrame();
				        	  final JPanel btn_panel = new JPanel();
				        	  final JTextField btn_txt = new JTextField(20);
				        	  final JButton btn_btn = new JButton("Beschriftung");
							  
							   bu[j] = new JButton("ich bin button" + j);
							  
						   //front_GUI.panel[1].add(bu[i]);
							  
							// System.out.println(GUI.txt[1]);
						   
							  panel[1].add(bu[j]);
							  
							  bu[j].addActionListener(new ActionListener() {
						          public void actionPerformed(ActionEvent e) {
						        
						        	  /*statt sysout connection to databases*/
						        	  System.out.println(e.getActionCommand());
						        	 
						         	  
						        	  btn_frame.add(btn_panel);
						        	  btn_panel.add(btn_txt);
						        	  btn_panel.add(btn_btn);
						        	  
						        	  btn_frame.setSize(300, 200);
						        	  btn_frame.setVisible(true);
					                
					          }
				   	  });
						  btn_btn.addActionListener(new ActionListener() {
						          public void actionPerformed(ActionEvent e) {
						         
						        	  String inhalt = String.valueOf(btn_txt.getText());
						        	  bu[0].setText(inhalt);
						        	  btn_frame.setVisible(false);
						        	  
						          
						          }});
 
Das soll er ja selber mitbekommen welcher Button gedrückt wurde und genau diesen dann umbennen.
Frage bzw.Problem ist wie man das mit 2 ActionListener löst. ???:L
 
Java:
for (int j = 0; j < intern1; j++) {
}

Was ist das ? Wofür baust du in deinem Programm eine for-Schleife ein ? Meiner Meinung nach zu kompliziert. Vielleicht erklärst du noch einmal, was du genau machen möchtest.

Mein Vorschlag, falls ich dich richtig verstanden habe:

Java:
public class FooFoo extends JFrame implements ActionListener {

    JButton btn1, btn2;
    JTextField edit1;
    JPanel panel1;
 
    public FooFoo() {
        btn1 = new JButton("Button 1");
        btn1.addActionListener(this);

        btn2 = new JButton("Button 2");
        btn2.addActionListener(this);

        edit1 = new JTextField("");

        panel1 = new JPanel();

        super("Test");
        setSize(300,300);                                                  
        setLocationRelativeTo(null);                                    

        panel1.add(btn1);
        panel1.add(btn2) ;
        panel1.add(edit1);

        add(panel1);

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
    }

   public void actionPerformed(ActionEvent evt) {
       if (evt.getSource == btn1) {
           btn1.setText(edit1.getText());
       } else {
           btn2.setText(edit1.getText());
       }
   }

Ich hoffe, ich habe dich richtig verstanden, dass du den Text eines Buttons auf Knopfdruck mit dem Inhalt eines Textfeldes ändern möchtest ;-)

MfG 🙂
 
haui95; hat gesagt.:
Java:
public class FooFoo extends JFrame implements ActionListener {

    JButton btn1, btn2;
    JTextField edit1;
    JPanel panel1;
 
    public FooFoo() {
        btn1 = new JButton("Button 1");
        btn1.addActionListener(this);

        btn2 = new JButton("Button 2");
        btn2.addActionListener(this);

        edit1 = new JTextField("");

        panel1 = new JPanel();

        super("Test");
        setSize(300,300);                                                  
        setLocationRelativeTo(null);                                    

        panel1.add(btn1);
        panel1.add(btn2) ;
        panel1.add(edit1);

        add(panel1);

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
    }

   public void actionPerformed(ActionEvent evt) {
       if (evt.getSource == btn1) {
           btn1.setText(edit1.getText());
       } else {
           btn2.setText(edit1.getText());
       }
   }

Das sieht schonmal besser aus. Du solltest dich dennoch mit dem Thema Listener noch einmal ausführlich beschäftigen.
Du gibst dem btn_btn(wow ich würd durcheinander kommen) einen Listener und erwartest dann, dass ein anderer Button seinen Text ändert wenn dieser gedrückt wird?
 
Ich muss ja nicht für jeden Button die actionPerformed() - Methode überschreiben. Ich habe einfach, dadurch dass ich das Interface implementiert habe, jeden Button über die Variable this einen ActionListener hinzugefügt und benutze dabei einfach nur eine actionPerformed() - Methode. Das Unterscheiden der beiden Buttons mache ich mit einer Verzweigung innerhalb der zu überschreibenden Methode des ActionListeners.

Müsste funktionieren !?

MfG
 
hallo,

Java:
public void actionPerformed(ActionEvent evt) {
       if (evt.getSource == btn1) {
           btn1.setText(edit1.getText());
       } else {
           btn2.setText(edit1.getText());
       }
   }

das genau was ich gesucht habe, nur das ich eine arraylist btn habe. wenn ich

Java:
if (evt.getSource == btn1[i]) {
           btn1[i].setText(edit1.getText());

versuche macht der das net.
 
Ganz ehrlich... Ich verstehe nur ansatzweise, was du willst.
Dein Code ist schlecht formatiert und was du versuchst, ist mir auch ein Rätsel.

Ich würde schätzen du meinst es in etwa so:
Du hast zwei Button-Arrays, wenn man auf ein Button des einen Arrays klickt soll es den Text des Buttons gleichen Indexes im anderen Array übernehmen.

Also in etwa sowas:
Java:
final int length = 5;
final JButton[] buttons1 = new JButton[length];
final JButton[] buttons2 = new JButton[length];
final ActionListener action1 = new ActionListener(){
    @Override public void actionPerformed(ActionEvent evt) {
        for(int i=0; i<length; i++)
            if(buttons1[i].equals(evt.getSource()))
                buttons1[i].setText(buttons2[i].getText());
    }
}
final ActionListener action2 = new ActionListener(){
    @Override public void actionPerformed(ActionEvent evt) {
        for(int i=0; i<length; i++)
            if(buttons2[i].equals(evt.getSource()))
                buttons2[i].setText(buttons1[i].getText());
    }
}
for(int i=0; i<length; i++){
    buttons1[i] = new JButton("Erste Buttonreihe, Button No. " + i);
    buttons1[i].addActionListener(action1);
    buttons2[i] = new JButton("Zweite Buttonreihe, Button No. " + i);
    buttons2[i].addActionListener(action2);
}
 
Wenn man vermeiden möchte, Objekte wie Buttons nur für den Actionlistener als Membervariablen zu führen, kann man übrigens auch
Code:
button.setName(EINDEUTIGER_NAME)
verwenden und im Listener dann mit

Java:
public void actionPerformed(ActionEvent event) {
        JComponent component = (JComponent) event.getSource();
        String name = component.getName();

        switch (name) {
            case EINDEUTIGER_NAME:

arbeiten. Hier, wo du nachträglich die Beschriftung änderst, brauchst du das Objekt natürlich trotzdem.
 

Zurück
Oben