2014-10-30 1 views
1

나는 12 시간 동안 간단한 jtextarea 컴포넌트의 내용을 프린터로 보내려고 노력했다. 이것은 미친 짓이다. 이전 코드에서 제안한대로 JavaDocs를 살펴 보았지만 솔직히 코드가 작동하지 않고 오류를 읽습니다. JTable의 내용을 인쇄하는 것은 꽤 간단했기 때문에 (코드 8 줄) jtextarea의 내용을 인쇄하는 것은 완전히 다르며 여러 클래스를 포함하고 훨씬 더 복잡하고 100을 넘는 일부 예제에서는 매우 복잡해졌습니다. 코드 행. Java 구성 요소를 간단히 인쇄하는 과정이 왜 이렇게 복잡한 지 이해할 수 없습니다.JTextArea 컴포넌트를 프린터로 보내기

누구나 다음 코드가 "인쇄 (그래픽)와 일치하는 인수 추가"오류를 읽고 프린터에 텍스트 영역 구성 요소를 보내고 내 인생을 계속 진행할 수있는 이유를 알려주십시오.

JButton btnNewButton_7 = new JButton("Print"); 
    btnNewButton_7.addActionListener(new ActionListener() { 
    @Override 
     public void actionPerformed(ActionEvent arg0) { 

     try{ 
      boolean complete = textArea_2.print(); 
      //The above line reads the error "Add argument to match print(Graphics)" 
      if(complete){ 
       JOptionPane.showMessageDialog(null, "Printjob Finished", "Report", 
         JOptionPane.INFORMATION_MESSAGE); 
      }else{ 
       JOptionPane.showMessageDialog(null, "Printing", "Printer", JOptionPane.ERROR_MESSAGE); 
       } 
      }catch(PrinterException e){JOptionPane.showMessageDialog(null, e); 
      } 
     } 

    }); 
+0

JavaDocs에서 시작된대로 'JTextArea # print'는 Java 6 이상에서만 사용할 수 있습니다. 어떤 Java 버전을 사용하고 있습니까? (btw, 코드가 잘 작동합니다, Java 6, 7 & 8) – MadProgrammer

답변

1

StandardPrint을 살펴볼 수 있습니다. 당신은 그 클래스에서 WindowUtilities

을 참조하는 라인을 제거 할 수 있습니다

JFrame jf = new JFrame("StandardPrint Test"); 
    final JTextArea area = new JTextArea(); 
    area.append("hello\n"); 
    for (int i = 0; i < 50; i++) { 
     area.append("\n"); 
    } 
    area.append("world\n"); 
    JScrollPane sp = new JScrollPane(area); 
    jf.add(sp); 
    JMenuBar bar = new JMenuBar(); 
    JMenu printMenu = new JMenu("Print"); 
    JMenuItem print = new JMenuItem("Print"); 
    printMenu.add(print); 
    ActionListener al = new ActionListener() { 
     public void actionPerformed(ActionEvent ae) { 
      StandardPrint sp = new StandardPrint(area); 
      sp.setTitle("Hello World"); 
      sp.setPrintPageNumber(true); 
      sp.setPageNumberVAlignment(BOTTOM); 
      sp.setPageNumberHAlignment(CENTER); 
      System.out.println(sp.getNumberOfPages()); 
      Image im1 = preview(300,300, sp, sp.getPageFormat(0), 0); 
      Image im2 = preview(300,300, sp, sp.getPageFormat(1), 1); 
      JLabel l = new JLabel(new ImageIcon(im1)); 
      JOptionPane.showMessageDialog(null, l); 
      l = new JLabel(new ImageIcon(im2)); 
      JOptionPane.showMessageDialog(null, l); 
     } 
    }; 
    print.addActionListener(al); 
    jf.setJMenuBar(bar); 
    bar.add(fm); 
    bar.add(printMenu); 
    jf.setBounds(100,100,400,400); 
    jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    jf.setVisible(true); 
} 
+0

종속성을 제거하도록 업데이트했습니다. – ControlAltDel

+0

고맙습니다. 그런데 왜 내가 게시 한 코드가 "인쇄와 일치하는 인수 추가 (그래픽)"라는 오류 메시지를 표시합니까? – Daron

+0

이 줄은 : "부울 완료 = textArea_2.print();" 그래픽 객체가 프린터가 아닌 화면에서 가져온 JTextArea.print (Graphics)입니다. – ControlAltDel

0

당신에게 모든 도움과 양해 MadProgrammer 감사드립니다. 나는 원래 프로그램에 문제가 무엇인지 알아 냈다. 그것은 꽤 간단했다. java.awt를 사용하여 TextArea 구성 요소를 만들었지 만, 분명히 인쇄하기 위해 사용했던 메서드는 javax.swing과 만 호환되었습니다! 이제는 프로그램이 완벽하게 작동합니다. 정말 혼란스러워지기 때문에 정말 큰 도움이됩니다.

관련 문제