2013-02-16 2 views
2

시스템 클립 보드에 저장할 때 Java 프로그램의 텍스트 서식을 유지하는 방법을 파악하는 데 문제가 있습니다.서식이 지정된 cliboard Java

Microsoft의 워드 패드 또는 Lotus Symphony와 같이 작동하지 않습니다. 반대로, Word에서 서식이 지정된 문자열을 만들고 복사하면 모든 붙여 넣기를 시도하는 모든 평가판이 제대로 작동합니다.

org.eclipse. *와 같은 외부 소스를 사용하고 싶지 않습니다.

다음은 올바른 방향으로 지적 할 수 있도록 컴파일 한 링크입니다.

나는 적절한 데이터 풍미를 사용하지 않는 것처럼 느껴 집니까? http://docs.oracle.com/javase/1.5.0/docs/api/java/awt/datatransfer/DataFlavor.html

이 링크는 dataflavors에 대해 많은 이야기를하고 있지만 형식이 지정된 텍스트에 어떤 것이 사용되는지에 대해서는별로 알려주지 않았습니다. 나는 이것이 모든 OS에서 동일하지 않을 수도 있지만 그것이 내가 사용하는 OS에서 지원되는지 확인해야한다고 이해한다. 고급에서 당신의 도움의 모든

http://www.javaworld.com/cgi-bin/mailto/x_java.cgi?pagetosend=/export/home/httpd/javaworld/javaworld/javatips/jw-javatip61.html&pagename=/javaworld/javatips/jw-javatip61.html&pageurl=http://www.javaworld.com/javaworld/javatips/jw-javatip61.html&site=jw_core

덕분에, 정말 감사!

편집 나는 현재 일부 코드를 사용하고

: 몇 가지 작은 변화 http://lists.apple.com/archives/java-dev/2004/Jul/msg00359.html. 현재 제가 겪고있는 문제는 두 가지 형식으로 클립 보드에 데이터를 전송해야한다는 것입니다. "text/rtf"및 "text/plain"은 일부 프로그램이 RTF를 지원하지 않는 것을 보았습니다. 나는 내부 클립 보드를 사용하여 클립 보드 안에 무엇이 있는지보고 있습니다. RTF 또는 일반 텍스트를 성공적으로 배치 할 수 있지만 동시에 둘 다 배치 할 수는 없습니다. 내가 할 때 마지막 사람 만 추가됩니다. 당신의 도움은 대단히 감사합니다!

요약하면 두 가지 다른 데이터 형식으로 클립 보드를 동시에 설정할 수는 없습니다. 많은 주변 검색 및 친구 세바스찬 로건에서 시행 착오 도움 후

import java.awt.datatransfer.*; 
import java.io.*; 

public class clipBoard 
{ 
public static final String RTF_STRING = "{\\rtf1\\ansi\\deff0 {\\fonttbl {\\f0 Courier;}}\r \n{\\colortbl;\\red0\\green0\\blue0;\\red255\\green0\\blue0;}\r\nThis line is the default color\\line\r\n\\cf2\r\n\\tab This line is red and has a tab before it\\line\r\n\\cf1\r\n\\page This line is the default color and the first line on page 2\r\n}\r\n"; 
public static final DataFlavor RTF_FLAVOR = new DataFlavor("text/rtf", "Rich Formatted Text"); 

public static void main(String[] args){ 
Clipboard cb = Toolkit.getDefaultToolkit().getSystemClipboard(); 
Transferable t = new MyTransferable(
new ByteArrayInputStream(RTF_STRING.getBytes()), RTF_FLAVOR); 
cb.setContents(t, null); 
} 

static class MyTransferable implements Transferable 
{ 
    private Object data = null; 
    private DataFlavor flavor; 

    public MyTransferable(Object o, DataFlavor df) 
    { data = o; flavor = df; } 

    public Object getTransferData (DataFlavor df) throws 
    UnsupportedFlavorException, IOException 
    { 
     if (!flavor.isMimeTypeEqual(flavor)) 
      throw new UnsupportedFlavorException(df); 
     return data; 
    } 

    public boolean isDataFlavorSupported (DataFlavor df) 
    { 
     return flavor.isMimeTypeEqual(df); 
    } 

    public DataFlavor[] getTransferDataFlavors() 
    { 
     DataFlavor[] ret = {flavor}; 
     return ret; 
    } 
} 

}

+1

당신은 우리가 코드를 추가 – MadProgrammer

+0

으로 테스트 할 수있는 작업 예제를 붙여 넣을 수 없습니다. 감사! – dannyn382

답변

5

, 그것을 알아 낸 것 같습니다. 이를 통해 Java의 한 번에 여러 형식의 데이터를 클립 보드에 저장하면서 텍스트의 스타일과 서식을 유지할 수 있습니다. 바라기를 이것은 누군가를 돕기를 바랍니다. 이것도 좋은 자료였습니다. http://www.pindari.com/rtf1.html

import java.awt.*; 
import java.awt.datatransfer.*; 
import java.io.*; 

public class clipBoard{ 
//Creates the RTF string 
private static final String RTF_STRING = "{\\rtf1\\ansi\\deff0\r\n{\\colortbl;\\red0\\green0\\blue0;\\red255\\green0\\blue0;}\r\nThis line is the default color\\line\r\n\\cf2\r\nThis line is red\\line\r\n\\cf1\r\nThis line is the default color\r\n}\r\n}"; 
//Creates the plain text string 
private static final String PLAIN_STRING = "This line is the default color \n This line is red \n This line is the default color"; 
//Array of data for specific flavor 
private static final Object data[] = {new ByteArrayInputStream(RTF_STRING.getBytes()),new ByteArrayInputStream(PLAIN_STRING.getBytes())}; 
//Plain favor 
private static final DataFlavor PLAIN_FLAVOR = new DataFlavor("text/plain", "Plain Flavor"); 
//RTF flavor 
private static final DataFlavor RTF_FLAVOR = new DataFlavor("text/rtf", "Rich Formatted Text"); 
//Array of data flavors 
private static final DataFlavor flavors[] = {RTF_FLAVOR,PLAIN_FLAVOR}; 

public static void main(String[] args){ 
    //Create clip board object 
    Clipboard cb = Toolkit.getDefaultToolkit().getSystemClipboard(); 
    //Create transferable object 
    Transferable p = new MyTransferable(data,flavors); 
    //Transfer to clip board 
    cb.setContents(p, null); 
} 

static class MyTransferable implements Transferable{ 
    //Array of data 
    private Object dataA[] = null; 
    //Array of flavors 
    private DataFlavor flavorA[] = null; 

    //Transferable class constructor 
    public MyTransferable(Object data[], DataFlavor flavors[]){ 
     //Set the data passed in to the local variable 
     dataA = data; 
     //Set the flavors passes in to the local variable 
     flavorA = flavors; 
    } 

    public Object getTransferData (DataFlavor df) throws UnsupportedFlavorException, IOException{ 
     //If text/rtf flavor is requested 
     if (df.getMimeType().contains("text/rtf")){ 
      //Return text/rtf data 
      return dataA[0]; 
     } 
     //If plain flavor is requested 
     else if (df.getMimeType().contains("text/plain")){ 
      //Return text/plain data 
      return dataA[1]; 
     } 
     else{ 
      throw new UnsupportedFlavorException(df); 
     } 
    } 

    public boolean isDataFlavorSupported (DataFlavor df){ 
     //If the flavor is text/rtf or tet/plain return true 
     if(df.getMimeType().contains("text/rtf") || df.getMimeType().contains("text/plain")){ 
      return true; 
     } 
     //Return false 
     else{ 
      return false; 
     } 
    } 

    public DataFlavor[] getTransferDataFlavors(){ 
     //Return array of flavors 
     return flavorA; 
    } 
} 
} 
관련 문제