2014-10-30 94 views
1

我一直在工作12個小時,試圖獲得一個簡單的jtextarea組件的內容發送到打印機。瘋了吧。我按照之前的代碼中的建議查看了JavaDocs,但坦率地說代碼不起作用並讀取錯誤。我非常沮喪,因爲它非常簡單(〜8行代碼)來打印JTable的內容,但出於某種原因,打印jtextarea的內容完全不同,涉及多個類並且在一些示例中超過100個代碼行。我不明白爲什麼簡單打印Java組件的過程會變得如此複雜。發送JTextArea組件到打印機

任何人都可以請告訴我爲什麼下面的代碼讀取錯誤「添加參數匹配打印(圖形)」,以及如何解決它,以便我可以發送textarea組件到打印機,並繼續我的生活。

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(順便說一下,你的代碼對我來說工作正常,Java 6,7和8) – MadProgrammer 2014-10-30 20:27:52

回答

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 2014-10-30 17:56:56

+0

謝謝。但爲什麼我發佈的代碼顯示錯誤消息「添加參數匹配打印(圖形)」? – Daron 2014-10-30 18:06:10

+0

這一行:「boolean complete = textArea_2.print();」簽名是JTextArea.print(圖形),其中圖形對象來自打印機,而不是屏幕 – ControlAltDel 2014-10-30 18:09:26

0

感謝您對所有您的幫助和耐心MadProgrammer。我只是想清楚我的原始程序有什麼問題。這很簡單。我用java.awt創建了TextArea組件......但是,我用來打印的方法顯然只與javax.swing兼容!現在我的程序完美運行,這真是一個很大的解脫,因爲我感到非常困惑。