2017-11-30 24 views
0

ボタンを押したときにラベルがテキストを変更したい。しかし、ボタンをクリックしたときにラベル上でsetText()を使用しようとすると、それを認識しません。Java - ボタンのラベルテキストを変更する

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

** 1 **ラベルと** 1 **ボタンだけで同じタイプのコードを書いてください。問題が再現された場合 - 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

関連する問題