PDA

View Full Version : سوال: ذخیره کلمات High Light شده



shahabp
شنبه 10 اسفند 1392, 23:55 عصر
سلام به همه،
چطور میتوانم کلماتی را که High Light میکنم، با استفاده از کلیک یا دابل کلیک یا کلیک وسط(شبیه بابیلون) در جایی ذخیره کنم؟



با تشکر
shahab.p

sajjad4563
یک شنبه 11 اسفند 1392, 19:12 عصر
خلاصه :


private JTextArea t1, t2;
private JButton copy;

t1 = new JTextArea( "Sample text", 10, 15 );

copy = new JButton( "Copy " );
copy.addActionListener(
new ActionListener() {
public void actionPerformed( ActionEvent e )
{
t2.setText( t1.getSelectedText() );
}
}
);

t2 = new JTextArea( 10, 15 );

shahabp
یک شنبه 11 اسفند 1392, 23:56 عصر
منظورم تشخیص اشاره گر ماوس داخل ویندور(نه داخل فرم برنامه).مثلا pdf یا web page و...

vahid-p
دوشنبه 12 اسفند 1392, 16:44 عصر
شما برای اینکار باید بتونید از API ها ویندوز استفاده کنید. ولی ساده ترین API کپی کردن است که در تمام سیستم عامل ها مثل هم است.
برای اینکار با توجه به راهنمایی http://stackoverflow.com/questions/10049409/buffer-carrying-stored-statement-using-ctrlc کد زیر رو براتون نوشتم که در background اجرا میشود و هر وقت بخشی رو کپی کردید ذخیره میکنه. روش کار به این صورت است که یک Thread ایجاد میکنید و اونو اجرا میکنید و بعد اون کاری باهاش ندارید. حالا هر یک ثانیه یا هر چقدر که خودتان در نظر دارید، یکبار بافر کلیپ بورد کپی رو چک میکنه در صورتی که داده کنونی با داده قبلی متفاوت بود، ذخیره می کند. ( البته با توجه به اینکه شما گفتید تنها کاراکتر را میخواهید، در حالی که میتونید برای فایل و عکس و... نیز به همین صورت اقدام کنید )

به این صورت : ( توجه کنید شما میتونید به جای System.out.println هر چیزی دیگری مانند خروجی به یک فایل قرار دهید. )

Thread t=new Thread(new Runnable() {
@Override
public void run() {
Clipboard clipboard=Toolkit.getDefaultToolkit().getSystemCli pboard();
Transferable transferable=null;
String transOldString=null;
String copiedText=null;
while (true) {
try {
Thread.sleep(1000);
} catch (InterruptedException ex) {
Logger.getLogger(JavaSETEST.class.getName()).log(L evel.SEVERE, null, ex);
}
transferable=clipboard.getContents(null);
if(transferable.isDataFlavorSupported(DataFlavor.s tringFlavor)){
try {
copiedText=(String) transferable.getTransferData(DataFlavor.stringFlav or);
} catch (UnsupportedFlavorException ex) {
Logger.getLogger(JavaSETEST.class.getName()).log(L evel.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(JavaSETEST.class.getName()).log(L evel.SEVERE, null, ex);
}
if(!copiedText.equals(transOldString)){
transOldString=copiedText;
System.out.println(copiedText); //به جای این قسمت میتوانید ذخیره در فایل یا هر چیزی دیگری قرار دهید
}
}
}
}
});
t.start();

vahid-p
دوشنبه 12 اسفند 1392, 17:11 عصر
البته فکر میکنم با استفاده از Toolkit.getDefaultToolkit().getSystemEventQueue() میتونید به همه رخدادهای سیستم دسترسی پیدا کنید. از قبیل راست کلیک، و کلید های فشرده شده حتی وقتی که در برنامه نیستید به رخدادهای سیستم دسترسی داشته باشید. البته بهتره از راست کلیک موس استفاده نکنید، چون در هر برنامه ای کلیک راست دارای گزینه های مختلفی هست و اضافه کردن یک گزینه به تمام لیست آیتم های منو راست کلیک امکان پذیر نیست. ولی میتونید مثل همین بابیلون که میگید، از ترکیب کلید ها استفاده کنید. حتی برای selection هم میتونید از Toolkit.getDefaultToolkit().getSystemSelection() استفاده کنید.

موفق باشید