2017-12-19 56 views
-1

콘텐트 창에 MouseListener이 설정된 최근에 프로그램을 만들었습니다. 문제는 JTextField을 클릭했을 때 심지어 setEnabled(false)setEditable(false)이라고 불렀지 만 내 mousePressed()은 발생하지 않습니다. 나머지는 잘 작동합니다. 그래서 내 질문 : 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를 제거하는 방법 on 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(); 
      } 
     }); 
    } 
}