Member 12972343 Ответов: 1

Автоматическая установка массива строк в буфер обмена один за другим при нажатии клавиши


Когда я копирую текст (разделенный табуляцией), моя программа разбивает скопированные тексты и сохраняет их в массиве строк. когда я нажму кнопку, она будет отображать массив текста один за другим и отображать вместе с набором текста в буфер обмена. я могу отображать текст, но не могу установить его в буфер обмена. Может ли кто-нибудь исправить мой код? мой код приведен ниже. заранее спасибо.
import java.awt.*;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.StringSelection;
import java.awt.event.*;
import javax.swing.*;

class MyProj {
public static void main(String [] args) throws Exception {

	Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
	String result = (String) clipboard.getData(DataFlavor.stringFlavor);
	
	StringSelection stringSelection = new StringSelection (aa[i]);
	clipboard.setContents (stringSelection, null);
	
    Buttonpanel panela = new Buttonpanel();
    panela.getstring(result);

    JFrame Frame = new JFrame("hiiiiii");
    Buttonpanel panel = new Buttonpanel();
    
    Frame.add(panel);
    Frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    Frame.setBounds(700,300,300,200);
    Frame.setVisible(true);
	}
}

class Buttonpanel extends JPanel implements ActionListener {

JButton button;
JLabel label;

static String[] aa ;
String bb = "";
static int i = 0;

Buttonpanel()
{
    button = new JButton("Push");
    add(button);
    button.addActionListener(this);
    label = new JLabel("hiiii");
    add(label);
}

void getstring(String bb)
{
	aa = bb.split("	");	
}

public void actionPerformed(ActionEvent e)
{
    label.setText(aa[i]);
   System.out.println(""+ i );  //loop working here
	i ++;
}
}


Что я уже пробовал:

я могу отображать текст, но не могу установить его в буфер обмена. Может ли кто-нибудь исправить мой код? мой код приведен ниже. заранее спасибо.

Afzaal Ahmad Zeeshan

Можете ли вы получить доступ к буферу обмена или что возвращает буфер обмена, когда вы пытаетесь получить к нему доступ?

Member 12972343

да, я могу получить доступ к буферу обмена, если помещу непосредственно любую строку вместо значения массива aa[i].

1 Ответов

Рейтинг:
1

Richard MacCutchan

Это потому, что вы устанавливаете только одну строку в буфер обмена в своем основном методе таким образом:

StringSelection stringSelection = new StringSelection (aa[i]);
clipboard.setContents (stringSelection, null);

Вам нужно подождать, пока вы соберете весь текст в массиве, а затем преобразовать его в форму, которую вы можете отправить в буфер обмена.


Member 12972343

@Richard MacCutchan когда я нажму кнопку, значение "i" будет увеличиваться на 1 каждый раз, и значение строки также изменится. нет необходимости ждать, потому что весь текст уже разбит и хранится в массиве. я просто хочу, чтобы при нажатии кнопки значение массива устанавливалось в буфер обмена, при следующем нажатии второе значение массива устанавливалось в clipboad и так далее.

Richard MacCutchan

Поэтому вам нужно добавить некоторый код к вашему методу нажатия кнопки, чтобы поместить последнюю строку в буфер обмена. Однако это все равно будет означать, что в буфере обмена в любой момент будет только одна строка.