2017-10-30 22 views
0

JButtonが押されたときにそのテキストを変更したい。これまでのところ、ボタンを押すとテキストが変わりますが、ボタンの外にマウスを移動すると、テキストは以前のもの(この場合は空の文字列)に戻ります。テキストがJButtonで変更されないようにするにはどうすればよいですか?ここで 押したときのJButtonのテキストの変更

は私のコードです:

import javax.swing.*; 
import java.awt.*; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

public class Tile extends JButton implements ActionListener { 
    private int xPos, yPos; 
    private char value; 

    Tile(int x, int y) { 
     xPos = x; 
     yPos = y; 
     setFont(this.getFont().deriveFont(Font.PLAIN, 45f)); 
     addActionListener(this); 
    } 

    @Override 
    public int getX() { 
     return xPos; 
    } 

    @Override 
    public int getY() { 
     return yPos; 
    } 

    public char getValue() { 
     return value; 
    } 

    @Override 
    public void actionPerformed(ActionEvent e) { 
     value = 'X'; 
     setText(Character.toString(value)); 
    } 
} 
+2

'getX' /' getY'を上書きしないでください、これは悪い考え – MadProgrammer

+0

である私は、 'getX' /' getY'文を削除し、問題なくあなたのコードを実行し、私は彼らが当然ある疑問あなたの問題とそれはあなたのコードの他のどこかにある可能性があります – MadProgrammer

+0

このコードは私のために完全に正常に動作します! – Prashant

答えて

-1

テキストはボタンが押されたときに変化しないが、私はボタンの外に私のマウスを移動すると、テキストはそれが

前にあったものに戻ります

したがって、ボタンの選択状態と目的の状態について、apidocsを読む必要があると思います。 がボタンの上にマウスを押す武装と押圧両方モデルを作る:

ButtonModel (Java Platform SE 8)
は詳細には、ボタンの状態モデルは、マウスで使用される場合、以下のように動作します。マウスが押し下げられている間は、マウスがボタンの外側に移動してもモデルは押されたままです。逆に、マウスはボタンの境界内で押されたままです(ボタンの内外に移動することができますが、ボタン内で費やされた時間の間だけモデルが準備されます)。モデルが準備されている間にマウスが離されると、ボタンがトリガされ、ActionEventが起動されます。つまり、ボタンが以前に押された後(まだリリースされていない)ボタンの上にリリースされたときです。マウスが離されると、モデルは非武装になり、プレスされなくなる。

import java.awt.*; 
import javax.swing.*; 

public class TileTest { 
    private JComponent makeUI() { 
    JButton button1 = new JButton("A"); 
    button1.addChangeListener(e -> { 
     JButton b = (JButton) e.getSource(); 
     ButtonModel m = b.getModel(); 
     boolean isPressedAndArmed = m.isPressed() && m.isArmed(); 
     b.setText(isPressedAndArmed ? "X" : "A"); 
    }); 

    JButton button2 = new JButton("B"); 
    button2.addChangeListener(e -> { 
     JButton b = (JButton) e.getSource(); 
     ButtonModel m = b.getModel(); 
     boolean isPressed = m.isPressed(); 
     b.setText(isPressed ? "X" : "B"); 
    }); 

    JPanel p = new JPanel(); 
    p.add(button1); 
    p.add(button2); 
    return p; 
    } 
    public static void main(String[] args) { 
    EventQueue.invokeLater(() -> { 
     JFrame f = new JFrame(); 
     f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 
     f.getContentPane().add(new TileTest().makeUI()); 
     f.setSize(320, 240); 
     f.setLocationRelativeTo(null); 
     f.setVisible(true); 
    }); 
    } 
} 
+1

私は、OPのコードが、少なくとも彼らが提示したコードで欲しいことをしているという事実を考慮して、なぜあなたが気になるのだろうと思っているのか疑問に思った。 – MadProgrammer

+0

@MadProgrammerありがとう。私はOPのコードを参照していませんでしたが、私に説明を思い出させました。補足として、私はapidocからの引用を追加しました。 – aterai

+0

私はまだ頭を傷つけています。 opが何を言っているかに基づいて、ボタンからマウスカーソルを離すと、テキストがリセットされますが、それはあなたが望むものではありませんが、できることです。私はopsコードを試してみましたが、それは必要に応じて動作するので、問題はおそらく他の場所です – MadProgrammer

関連する問題