2017-11-30 26 views
0

버튼을 누르면 라벨이 텍스트로 바뀌길 원합니다. 하지만 단추를 클릭 할 때 레이블에 setText()를 사용하려고하면 인식하지 못합니다.자바 - 버튼의 라벨 텍스트 변경하기

public class SingleButton JPanel을 확장합니다. ActionListener를 구현합니다. { protected JButton b1;

:

public SingleButton() { 
    ImageIcon leftButtonIcon = createImageIcon("images/right.gif"); 
    ImageIcon middleButtonIcon = createImageIcon("images/middle.gif"); 
    ImageIcon rightButtonIcon = createImageIcon("images/left.gif"); 

    b1 = new JButton("Axxxxxx"/*, leftButtonIcon*/); 
    b1.setVerticalTextPosition(AbstractButton.CENTER); 
    b1.setHorizontalTextPosition(AbstractButton.LEADING); //aka LEFT, for left-to-right locales 
    b1.setMnemonic(KeyEvent.VK_D); 
    b1.setActionCommand("enableb1"); 
    b1.setEnabled(true); 

    //Listen for actions on all buttons. 
    b1.addActionListener(this); 

    b1.setToolTipText("Click for a UPNs"); 

    JLabel labelUpn = new JLabel("UPN number here on button press"); 

    //Add Components to this container, using the default FlowLayout. 
    add(b1); 

    add(labelUpn); 
    labelUpn.setText("UPN number here"); 
} 

public void actionPerformed(ActionEvent e) { 
    if ("enableb1".equals(e.getActionCommand())) { 
     b1.setEnabled(false); 
     labelUpn.setText("New Text"); 


    } 
} 
+0

최소에있다 당신은 actionPerformed 메소드에서 Button_name.setText ("텍스트")라고하지 않았다 - 여전히 같은 문제를 생산하고 가능한 한 적은 코드를 사용합니다. 모든 코드를 표시하지 않으면 문제를 재현 할 수 없습니다. – PerfectContrast

+0

** ** ** ** ** ** ** ** 버튼만으로 동일한 유형의 코드를 작성하십시오. 문제가 재현되면 MVCE를 얻지 못하면 실제 코드와 비교하여 차이점을 찾으십시오. –

+0

[mcve]를 게시하십시오. 우리는 github 프로젝트를 보지 않을 것입니다. – Reimeus

답변

0

몇 가지 문제 .....이 문제의 해결책이 될 수 있습니다. actionPerformed() 방법의 레이블에 setText으로 전화 한 적이 없습니다.

. JLabel labelUpn은 생성자에 대해 로컬입니다. actionPerformed()에서 액세스하려면 클래스 변수로 지정하십시오.

e.getSource()을 JButton으로 캐스팅하여 클릭 한 버튼을 알면 해당 텍스트를 가져올 수 있습니다 (이 텍스트는 " UPN ")에 getText()를 호출하여 호출합니다.

public class ButtonDemo extends JPanel 
implements ActionListener { 
    protected JButton b1, b2, b3, b4; 
    protected JLabel labelUpn; 

    public ButtonDemo() { 
     //... 
     labelUpn = new JLabel("UPN number here on button press"); 
     //... 
    } 

    public void actionPerformed(ActionEvent e) { 
     //... 
     JButton clicked = (JButton) e.getSource(); 
     labelUpn.setText(clicked.getText()); 
    } 
+0

좋은 점, 그게 문제였습니다. actionPerformed() 안에 setText를 호출하지 않는다는 것은 무슨 뜻입니까? 나쁘지? e.getSource()를 더 잘 사용하고 있습니까? – PerfectContrast

+0

내 나쁜, 나쁜 말씨. 나는 당신이 게시 된 코드에서 actionPerformed() 안에 setText()를 호출하지 않았으며, 결코 그렇게하지 말아야한다는 것을 의미하지는 않는다. – Hassan

+0

아 아아. 그것이 작동하지 않았던 것에 따라 나는 그것을 놓고 갔다. 문제는 labelUpn이 클래스 변수 일 필요가 있다는 것입니다. – PerfectContrast

0

은 당신의 코드

import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.*; 

public class JLabelDemo { 

    public JLabel labelText; 
    public JLabelDemo() { 
     JFrame f = new JFrame("JLabel Demo"); 
     f.setVisible(true); 
     f.setSize(500, 500); 
     f.setLayout(null); 

     labelText = new JLabel("StackOverflow"); 
     labelText.setBounds(50, 100, 150, 30); 
     f.add(labelText); 

     JButton btn = new JButton("Change Text"); 
     btn.setBounds(70, 200, 150, 60); 
     f.add(btn); 


     btn.addActionListener(new ActionListener() { 

      @Override 
      public void actionPerformed(ActionEvent e) { 
       // TODO Auto-generated method stub 
       labelText.setText("Google.com"); 
      } 
     }); 

    } 

    public static void main(String[] args) { 
     new JLabelDemo(); 
    } 
} 
0

방금 ​​코드를 읽었습니다. 이것은 문제를 해결할 수 있습니다. 코드가 https://textsaver.flap.tv/lists/1ppi

+0

안녕하세요, 코멘트 주셔서 감사하지만 그것은 버튼 텍스트 자체가 아니라 변경하려는 라벨 텍스트입니다. 다른 포스터에서 답을 찾았습니다! – PerfectContrast