2009-12-04 68 views
3

我有一个带有JTextArea组件的JDialog。这个对话框显示用户在运行程序时使用什么参数,让它运行它们刚刚设置的模式。我在对话框上有一个按钮来将参数复制到剪贴板。这在JTextArea对象上使用copy()方法。程序退出时清除JTextArea.copy()剪贴板

这很好地工作,剪贴板包含正确的文本,直到程序关闭。然后剪贴板丢失。无论如何要在程序退出后保留这一点吗?正常的操作将是然后退出程序并用参数重新启动它。

这可能听起来很奇怪,但想法是用户可以用GUI设置一个环境,然后用cron或类似的参数运行它。

+0

即使你得到这个工作,是不是它受制于用户在程序执行之后但在程序使用之前不在剪贴板上放置东西?这意味着用户可能会意外地搞砸了你的程序。 – TofuBeer 2009-12-04 16:24:50

+0

嗨@Android你有没有找到解决你的问题的方法? – pratikabu 2013-06-14 16:00:24

回答

0

我建议使用Preferences API代替。

+0

该参数是它应该加载的配置文件的路径。用户可能会设置很多这样的内容,所以我不能只拥有一个始终在启动时加载的默认文件。 – 2009-12-04 08:13:18

+0

但是你一次只能在剪贴板中找到其中的一个。所以当他们通过按钮改变它时,将它保存到剪贴板,然后程序使用该值。我所建议的是同样的事情 - 按下按钮并通过首选项保存它,然后当程序查找它而不是查看剪贴板时,它使用首选项来抓取它。相同的数据,相同的流量,只是在不同的地方看。 – TofuBeer 2009-12-04 08:28:13

1

我刚才了解到,在Java中有两个剪贴板,一个是本地剪贴板,一个是系统剪贴板。会解释一些事情,如果你只是拿本地剪贴板。

Here's an example使用系统剪贴板。希望它能解决你的问题!

+0

这个工程,但程序关闭时仍然有同样的问题。 – 2009-12-04 10:45:01

+0

非常非常奇怪 - 你能否仔细检查一下,如果你在关闭应用程序之前不意外地将一些空的或其他物体复制到剪贴板,iaw,意外覆盖内容? – 2009-12-04 10:58:57

+0

我只是复制粘贴并运行该链接上的程序。程序退出时剪贴板被清除。在最后一行添加了一个thread.sleep,文本在剪贴板上直到它结束。 – 2009-12-04 11:37:28

1

当我使用Ctrl + C复制文本组件的内容时,适用于我。因此,尝试使用附带的行动(这是按Ctrl + C使用)来完成,而不是copy()方法的副本:

JButton button = new JButton(DefaultEditorKit.CopyAction()); 
1

可以使用机器人来模拟按Ctrl + C

Robot robot = new Robot(); 
robot.keyPress(KeyEvent.VK_CONTROL); 
robot.keyPress(KeyEvent.VK_C); 
robot.keyRelease(KeyEvent.VK_C); 
robot.keyRelease(KeyEvent.VK_CONTROL); 

即使在关闭程序后,这些仍然会保留在剪贴板中。

或者你可以尝试

StringSelection ss = new StringSelection("your text for clipboard"); 
Toolkit.getDefaultToolkit().getSystemClipboard().setContents(ss, null); 

其在Windows 7

+0

有趣的是,在Linux中剪贴板在程序终止时丢失。即使手动CTRL-C也会丢失。 – 2011-01-14 18:20:29

0

对我的作品对我来说,这仅仅是不够的:

JButton buttonCopy = new JButton(new DefaultEditorKit.CopyAction()); 
buttonCopy.setText("copy");