2016-09-16 8 views
5

私は自分のプロジェクト作業のためにJavaでデスクトップアプリケーションを開発しています。小計フィールドと合計フィールドを含む請求書をJTableの表形式のデータとともに印刷する必要があります。テーブルは印刷できますが、同じページには印刷できません。すなわち、第1ページのJTableプリントと、次ページの小計、合計プリントとを含む。両方のデータを同じページに印刷する方法はありますか?私は報告エンジンを使いたくない。 inbuilt Java印刷サービスを使用してください。私を案内してください。私が好きなJavaでJTableとその他のテキストフィールドを印刷する

印刷形式:

enter image description here

次の図は、GUI

enter image description here

を示していると次の図は、私が今まで取得していますレポートを示しています。正しい形式ではありません。あなたがきた座標にすべて自分のものを印刷したい場合は

 JLabel title = new JLabel(); 
     title.setText("Invoice"); 
     title.setBounds(300, 200, 80, 30); 


     JTextField subTotal = new JTextField(); 
     subTotal.setText("Sub Total : Rs. " + SubTotal.getText()); 
     subTotal.setBounds(400, 200, 150, 30); 


     MyPrintable prt = new MyPrintable(); 
     prt.addComponent(title); 
     prt.addComponent(billTable); //billTable is the JTable 
     prt.addComponent(subTotal); 
     prt.printIt(); 

を次のように

enter image description here

コードがあり、以下に私の印刷可能なクラスが

class MyPrintable implements Printable 
{ 
private ArrayList<JComponent> items; 

public MyPrintable() 
{ 
    items = new ArrayList<>(); 
} 
@Override 
public int print(Graphics g, PageFormat pf, int page) throws PrinterException 
{ 
    if(page > 0) return Printable.NO_SUCH_PAGE; 
    Graphics2D g2 = (Graphics2D)g; 
    g2.translate(pf.getImageableX(), pf.getImageableY()); 


    for(JComponent item : items) 
    { 
     item.setLayout(null); 
     // item.setBounds(500, 500, 200, 200); 
     item.printAll(g); 
     g2.translate(0, item.getHeight()); 
    } 
    return Printable.PAGE_EXISTS; 
} 

public void printIt() 
{ 
    PrintRequestAttributeSet attributes = new HashPrintRequestAttributeSet();; 
    PrinterJob job = PrinterJob.getPrinterJob(); 
    try 
    { 
     job.setPrintable(this); 
     if(job.printDialog(attributes)) 
      job.print(attributes); 
    } 
    catch (PrinterException e) 
    { 
     JOptionPane.showMessageDialog(null, e); 
    } 
} 

public void addComponent(JComponent component) { items.add(component); } 
} 
+0

のように見えるのだろうか? –

+0

@SergiyMedvynskyy私は質問を編集しました。 – Redone

+0

コードを見ずに、どうすれば手助けできますか? [SSCCE](http://sscce.org)を入力してください。私(または他の誰か)があなたを助けようとすることができます。 –

答えて

2

です助けてください設定すると、新しいパネルを作成し、このパネルで印刷するすべてのコンポーネントをレイアウトし、このパネルを印刷するか、またはpri内のすべてのコンポーネントを翻訳する必要がありますntメソッドを正しい座標に変換します。

第二の方法は、あなたがそれをあなたが必要とするすべてのスタッフとのページ(パネル)を作成して印刷しようとしたことがあり

public int print(Graphics g, PageFormat pf, int page) throws PrinterException 
{ 
    if(page > 0) return Printable.NO_SUCH_PAGE; 
    Graphics2D g2 = (Graphics2D)g; 
    g2.translate(pf.getImageableX(), pf.getImageableY()); 


    for(JComponent item : items) 
    { 
     g2.translate(item.getX(), item.getY()); 
     item.printAll(g); 
     g2.translate(-item.getX(), -item.getY()); // bring all back to default coordinates 
    } 
    return Printable.PAGE_EXISTS; 
} 
関連する問題