0

私の問題はこれです...

JFrame ActualFrame = new JFrame("Actual frame");
JScrollPane pane = new JScrollPane(new JTable(data, columns));
ActualFrame.add(pane);
ActualFrame.add(PrintPreviewBtn);

PrintPreviewBtn.addActionListener(new ActionListener() {            
 public void actionPerformed(ActionEvent e) {
   JFrame PreviewFrame = new JFrame("Preview");
   PreviewFrame.add(pane, BorderLayout.CENTER);
}

プログラムを実行するとすべてがうまくいくように見えますが、印刷プレビューボタンを押すとプレビューフレームが表示され、ActualFrameを最大化またはサイズ変更するとテーブルが消えます...。

注:ペインをプレビューフレームに追加して、表示されているテーブルのプレビューであるかのように表示します.....他の印刷プレビュー方法とは異なります

4

3 に答える 3

1

印刷には、java.awt.PrinterJobクラスがあります。標準の印刷プレビューを表示するには、次の電話番号を呼び出す必要があります。

PrinterJob job = PrinterJob.getPrinterJob();
job.printDialog();
于 2013-01-15T18:43:29.817 に答える
1

コンポーネントは、単一の親にのみ属することができます。に追加するとPreviewFrame、自動的にから削除されますActualFrame

前のパネルを使用する代わりに、前のパネルJTableのモデルを使用して、新しいパネルを作成します。

アップデート

テーブルの印刷はヘッダーを含むため少し複雑であり、使用可能なスペースの要件を満たすために列のサイズを変更する必要があります。

いくつかの例については、テーブルの印刷チュートリアルをご覧ください

于 2013-01-15T20:08:57.793 に答える
0

JScrollPaneがから消える理由は次のとおりです。inActualFrameの同じインスタンスを追加していpaneますPreviewFrame。したがって、の実際のコンテナはのpane代わりPreviewFrameになりActualFrameます。を最大化またはサイズ変更するActualFrameと、子コンポーネントが再描画されます。panenowはもはや属していないので、 nowActualFrameは表示されませんpane

この状況を回避する最善の方法は、オブジェクトの作成中にのコンストラクター内で匿名クラスオブジェクトJTabelを渡すのではなく、最初に個別のインスタンスを作成することです。そのインスタンスのandを取得します。その新しいインスタンスを追加すると、同じオブジェクトとオブジェクトを持つの新しいインスタンスが含まれます。コードは次のようになります。JTableJScrollPanepaneTableModelTableColumnModelJTablepreviewFrameJScrollPaneJTableTableModelTableColumnModel

final JTable table = new JTable(data,columns);
JScrollPane pane = new JScrollPane(table);
ActualFrame.add(pane);
ActualFrame.add(PrintPreviewBtn);

PrintPreviewBtn.addActionListener(new ActionListener() {            
 public void actionPerformed(ActionEvent e) {
   JFrame previewFrame = new JFrame("Preview");
   javax.swing.table.TableModel tabModel = table.getModel();
   javax.swing.table.TableColumnModel colModel = table.getColumnModel();
   JScrollPane previewPane = new JScrollPane(new JTable(tabModel,colModel));
   previewFrame.getContentPane().add(previewPane, BorderLayout.CENTER);
   previewFrame.pack();previewFrame.setVisible(true);
}
于 2013-01-15T20:49:32.480 に答える