Java JTextArea Üzerinde Sağ Tıklanıldığında İlgili Kelimeyi Bulmak
17-09-2014
JTextArea içeriği içerisinde bir kelimenin üstüne gelip sağ tıkladığımızda bu kelimeyi MessageDialog ile göstermek istiyorsak aşağıdaki kodları kullanabiliriz:
import javax.swing.*; import javax.swing.text.BadLocationException; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; /** * Gets word from right clicked area */ public class WordSelectionFromRightClick { public static void main(String[] args) { final JTextArea txtContent = new JTextArea(25, 30); JFrame frame = new JFrame("Word Selection From Right Click"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.add(txtContent); frame.pack(); frame.setLocationRelativeTo(null); frame.setVisible(true); txtContent.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { //BUTTON3 represents right click if (e.getButton() == MouseEvent.BUTTON3) { txtContent.setCaretPosition(txtContent.viewToModel(e.getPoint())); int caretPosition = txtContent.getCaretPosition(); try { String word = getWord(caretPosition, txtContent); JOptionPane.showMessageDialog(null, word); } catch (BadLocationException e1) { e1.printStackTrace(); } } } }); } private static String getWord(int caretPosition, JTextArea txtContent) throws BadLocationException { int startIndex; int endIndex; int i = 0; while (!txtContent.getText(caretPosition + i, 1).equals(" ") && !txtContent.getText(caretPosition + i, 1).equals("\n")) { i++; } endIndex = caretPosition + i; int j = 0; while (j < caretPosition && !txtContent.getText(caretPosition - j - 1, 1).equals(" ")) { j++; } startIndex = caretPosition - j; return txtContent.getText(startIndex, endIndex - startIndex); } }