Este artigo descreve o método de implementação de Java usando a área de transferência para trocar dados entre programas. Em sistemas gráficos, a área de transferência do sistema é muito importante. É difícil imaginar como seria usado um sistema operacional gráfico sem a função de área de transferência. Este exemplo realiza a troca de dados entre o programa Java e a área de transferência do sistema. Ao clicar no botão “Colar”, o programa Java obtém os dados da área de transferência do sistema e os exibe em um componente JTextArea quando o botão “Copiar”; é clicado. Depois disso, o texto selecionado na área de texto será transferido para a área de transferência do sistema.
Primeiro, você deve obter uma referência de instância para a área de transferência do sistema. A classe java.awt.Toolkit fornece o método getSystemClipboard() para retornar uma instância da área de transferência e como a classe Toolkit fornece o método estático getDefaultToolkit() para retornar uma instância do Toolkit; não há necessidade de criar um novo objeto Toolkit, o código de implementação específico é o seguinte:
Área de transferência cb = Toolkit.getDefaultToolkit().getSystemClipboard();
Aqui, a classe Clipboard fornece os métodos getContents() e setContents() para implementar a troca de dados.
GetContents transferível(solicitante de objeto);Void setContents(Conteúdo transferível, proprietário ClipboardOwner);
O método getContents() aqui obtém um objeto Transferível da área de transferência do sistema. O parâmetro solicitante representa o solicitante de dados. Geralmente, isso é suficiente, indicando que a solicitação de dados é um objeto de instância desta classe. Se os dados necessários forem texto, você pode chamar getTransferData(DataFlavor.stringFlavor) do objeto Transferível para obtê-los.
Transferível tr = cb.getContents(this);String s = (String) tr.getTransferData(DataFlavor.stringFlavor);
O método setContents() transfere dados do programa para a área de transferência do sistema. O conteúdo do parâmetro representa os dados e o proprietário do parâmetro representa o proprietário da área de transferência.
StringSelection ss = new StringSelection(this.jTextArea1.getText());cb.setContents(ss,ss);
A classe StringSelection na instrução acima representa o texto selecionado.
A partir da análise acima, de fato, a área de transferência do sistema armazena uma coleção de objetos transferíveis, e a troca de dados entre o programa e a área de transferência do sistema é a transferência de objetos transferíveis. Código do programa:
1. Crie um novo projeto e nomeie-o JClipDemo.
2. Crie um novo aplicativo e nomeie-o como JClipDemo; nomeie a janela principal como MainFrame e nomeie-a como JClipDemo.
3. Adicione um componente JTextArea, dois JButtons e um componente JPanel à janela de design da classe MainFrame e coloque os dois componentes JButton no componente JPanel. Adicionar nova propriedade Clipboard cb. O código específico é o seguinte:
public class MainFrame estende JFrame {private JPanel contentPane;private BorderLayout borderLayout1 = new BorderLayout();//Cria um novo componente private JTextArea jTextArea1 = new JTextArea();private JPanel jPanel1 = new JPanel();private JButton jButton1 = new JButton( ); JButton privado jButton2 = novo JButton();//instância da área de transferênciaClipboard cb = Toolkit.getDefaultToolkit().getSystemClipboard();……}
4. Escreva o método de inicialização jbInit() da classe MainFrame, complete as configurações de propriedade inicial de cada componente e adicione um ouvinte de evento para o componente de botão.
private void jbInit() lança exceção {//setIconImage(Toolkit.getDefaultToolkit().createImage(MainFrame.class.getResource("[Seu ícone]")));contentPane = (JPanel) this.getContentPane();contentPane.setLayout (borderLayout1);this.setSize(nova dimensão(396, 203));this.setTitle("JClipboardDemo");jButton1.setFont(new java.awt.Font("Dialog", 0, 14));jButton1.setText("Copiar");jButton1.addActionListener(novo java. awt.event.ActionListener() { //Adicionar ouvinte de evento public void actionPerformed(ActionEvent e) {jButton1_actionPerformed(e);}});jButton2.setFont(new java.awt.Font("Dialog", 0, 14));jButton2.setText("Paste");jButton2.addActionListener(new java.awt .event.ActionListener() {//Adicionar ouvinte de evento public void actionPerformed(ActionEvent e) {jButton2_actionPerformed(e);}});contentPane.add(jTextArea1, BorderLayout.CENTER);contentPane.add(jPanel1, BorderLayout.SOUTH);jPanel1.add(jButton1, null);jPanel1.add(jButton2, null); }
5. Escreva o método de tratamento de eventos do botão "Copiar" para enviar dados para a área de transferência do sistema.
void jButton1_actionPerformed(ActionEvent e) {StringSelection ss = new StringSelection(this.jTextArea1.getText()); //Envia o texto selecionado para a área de transferência do sistema cb.setContents(ss,ss);}
6. Escreva o método de manipulação de eventos do botão "Colar" para obter dados da área de transferência do sistema.
void jButton2_actionPerformed(ActionEvent e) {try{Transferable tr = cb.getContents(this); //Obter um objeto transferível da área de transferência do sistema if (tr != null){String s = (String) tr.getTransferData(DataFlavor.stringFlavor ); //Obter dados de texto do objeto transferível if (s!=null)this.jTextArea1.insert(s,this.jTextArea1.getCaretPosition()); //Inserir texto na posição do cursor no componente JTextArea}}catch(Exception err){err.printStackTrace();} }