2017-12-19 38 views
-1

コンテンツペインにMouseListenerが設定されたプログラムを作成しました。問題は私がsetEnabled(false)setEditable(false)と呼んでもJTextFieldをクリックしても私のは発生しません。残りはうまくいきます。だから私の質問:どのように私はJTextFieldが含まれているデフォルトのMouseListenerを無効にするのですか?JTextFieldのデフォルトのMouseListenerを無効にする方法は?

編集:テスト目的のために:

import java.awt.EventQueue; 
import java.awt.event.MouseEvent; 
import java.awt.event.MouseListener; 

import javax.swing.JFrame; 
import javax.swing.JTextField; 

public class test extends JFrame implements MouseListener{ 

    public static void main(String[] args) { 
     EventQueue.invokeLater(new Runnable() { 
      public void run() { 
       try { 
        test frame = new test(); 
        frame.setVisible(true); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } 
     }); 
    } 

    test(){ 
     setBounds(0,0,500,500); 
     addMouseListener(this); 
     setLayout(null); 
     JTextField n = new JTextField("test"); 
     n.setEditable(false); 
     n.setBounds(200,200,40,20); 
     add(n); 
    } 

    @Override 
    public void mouseClicked(MouseEvent arg0) { 
     System.out.println("test"); 


    } 

    @Override 
    public void mouseEntered(MouseEvent arg0) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void mouseExited(MouseEvent arg0) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void mousePressed(MouseEvent arg0) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void mouseReleased(MouseEvent arg0) { 
     // TODO Auto-generated method stub 

    } 
} 
+0

可能な重複[のMouseListener/ActionListenerを削除する方法JTextField](https://stackoverflow.com/questions/2627946/how-to-remove-mouselistener-actionlistener-on-a-jtextfield) – vinS

+1

あなたはフィールドを無効にしました。仕事は? – Kayaman

+0

私はそれを無効にしたので、その文字を選択することはできません。 MouseListenerは親からのものです。 contentPaneまたはその上のJLabelをクリックするだけで動作します。ちょうどJTextFieldは望みません。 – Ragnaroek511

答えて

1

私はそれを無効にするので、あなたはそれの文字を選択することはできません。

あなたはいつも同じ選択の開始/終了を行うために、カスタムキャレットを使用して、任意のテキストフィールドのテキストの選択を防ぐことができます。

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

public class NoTextSelectionCaret extends DefaultCaret 
{ 
    public NoTextSelectionCaret(JTextComponent textComponent) 
    { 
     setBlinkRate(textComponent.getCaret().getBlinkRate()); 
     textComponent.setHighlighter(null); 
    } 

    @Override 
    public int getMark() 
    { 
     return getDot(); 
    } 

    private static void createAndShowUI() 
    { 
     JTextField textField1 = new JTextField("No Text Selection Allowed"); 
     textField1.setCaret(new NoTextSelectionCaret(textField1)); 
     textField1.setEditable(false); 

     JTextField textField2 = new JTextField("Text Selection Allowed"); 

     JFrame frame = new JFrame("No Text Selection Caret"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.add(textField1, BorderLayout.NORTH); 
     frame.add(textField2, BorderLayout.SOUTH); 
     frame.pack(); 
     frame.setLocationByPlatform(true); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) 
    { 
     EventQueue.invokeLater(new Runnable() 
     { 
      public void run() 
      { 
       createAndShowUI(); 
      } 
     }); 
    } 
} 
関連する問題