3

JTableを印刷するときに、色付きのヘッダーとフッターを作成しようとしています。具体的には、javax.swing.JTableのgetPrintable()を見ていますが、MessageFormatには、ヘッダーまたはフッターの色を指定するオプションがありません。

どうすればいいですか?

明確化 印刷中にヘッダー/フッターを設定することに興味があります。たとえば、メモ帳は、印刷するものにヘッダーとしてファイル名を追加します。

更新 これを行う標準的な方法はないようですが、誰かが私にいくつかの回避策を教えてもらえますか?これまでに投稿された唯一の回答は、ヘッダー/フッターの印刷(プリンターへの送信、画面への表示ではないなど)とは関係ありません。

コメントからコピー:ヘッダー/フッターの印刷に興味があります。たとえば、メモ帳からドキュメントを印刷する場合、ファイル名がヘッダーとして追加されます(または、おそらくそのフッターですが、正確には覚えていません)。

4

4 に答える 4

3

私が考えることができる1つの解決策は、独自の印刷可能なものを使用することです。

public class CustomTablePrintable implements Printable {

    Printable tablePrintable;

    public void setTablePrintable(Printable printable) {
        tablePrintable = printable;        
    }

    public int print(Graphics graphics, PageFormat pageFormat, 
            int pageIndex) throws PrinterException {
        if (pageIndex > 0) {
            return NO_SUCH_PAGE;
        }

        tablePrintable.print(graphics, pageFormat, pageIndex);

        Graphics2D g2d = (Graphics2D)graphics;
        g2d.translate(pageFormat.getImageableX(), pageFormat.getImageableY());

        // Draw header/footer here
        graphics.drawString(header, posx, posy);

        return PAGE_EXISTS;        
    }
}

JTableからgetPrintableを呼び出すときは、それをカスタムprintableの新しいインスタンスに挿入してから、これをPrinterJobで使用します。

これで、ヘッダーとフッターを好きなように描画できますが、いくつかのものが失われます。

  • MessageFormatを使用してメッセージをフォーマットすることはできません。この機能を印刷可能なものに簡単に追加できると思います。
  • ヘッダーとフッターは自動的に配置されません。ただし、これらの概算を得ることができます。

編集:私はJavaソースを見てきましたが、すべての仕事をするプライベートクラスTablePrintableがあります。ソースコードをピークにして、ヘッダーとフッターがどのように印刷されるかを確認できます。次に、この機能をPrintableクラスに移動できます。

于 2009-05-29T09:44:25.883 に答える
0

このコードは主にwww.java2s.comからのもので、色を変更する方法を示すために変更が加えられています。それは最も美しい解決策ではありませんが、うまくいけばあなたを助けるでしょう。

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;

import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.UIManager;
import javax.swing.border.Border;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumn;
import javax.swing.table.TableColumnModel;

public class MainClass {
  public static void main(String args[]) {
    String rows[][] = { { "A", "a" }, { "B", "b" }, { "E", "e" } };
    String headers[] = { "Upper", "Lower" };

    JFrame frame = new JFrame("Label Header");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    JTable table = new JTable(rows, headers);
    JScrollPane scrollPane = new JScrollPane(table);

    Border headerBorder = UIManager.getBorder("TableHeader.cellBorder");

    JLabel headerLabel1 = new JLabel(headers[0], JLabel.CENTER);
    headerLabel1.setBorder(headerBorder);

    // Here is where the color is changed.
    headerLabel1.setBackground(new Color(255, 0, 0));
    headerLabel1.setForeground(new Color(0, 0, 255));
    // End of color change.

    JLabel headerLabel2 = new JLabel(headers[1], JLabel.CENTER);
    headerLabel2.setBorder(headerBorder);

    TableCellRenderer renderer = new JComponentTableCellRenderer();

    TableColumnModel columnModel = table.getColumnModel();

    TableColumn column0 = columnModel.getColumn(0);
    TableColumn column1 = columnModel.getColumn(1);

    column0.setHeaderRenderer(renderer);
    column0.setHeaderValue(headerLabel1);

    column1.setHeaderRenderer(renderer);
    column1.setHeaderValue(headerLabel2);

    frame.add(scrollPane, BorderLayout.CENTER);
    frame.setSize(300, 150);
    frame.setVisible(true);
  }
}

class JComponentTableCellRenderer implements TableCellRenderer {
  public Component getTableCellRendererComponent(JTable table, Object value, 
      boolean isSelected, boolean hasFocus, int row, int column) {
    return (JComponent)value;
  }
}

最も重要なビットは次のとおりです。

    // Here is where the color is changed.
    headerLabel1.setBackground(new Color(255, 0, 0));
    headerLabel1.setForeground(new Color(0, 0, 255));
    // End of color change.

HTHはあなたがそれをどうやってやってきたか教えてくれます:)

于 2009-05-21T21:02:31.980 に答える
0

これは少し左翼から外れていますが、iTextのようなライブラリを使用してPDFドキュメントを作成し、それをプリンタに送信することができます。テーブルの行がページの境界を越える方法を管理する機能など、ドキュメントの外観と表示をより高度に制御できるようになり、ページのヘッダーとフッターを非常に簡単に設定できるようになります。 。

次の手順に従って、JavaでPDFを印刷できます。http ://www.juixe.com/techknow/index.php/2008/01/17/print-a-pdf-document-in-java/

于 2009-05-29T13:52:56.753 に答える
-1

それは簡単です:

JTable table = new JTable();
            ((DefaultTableCellRenderer)table.getTableHeader().getColumnModel().getColumn(4).getHeaderRenderer()).setForeground(Color.ORANGE);
于 2011-04-09T08:04:16.430 に答える