2009-05-21 2 views
2

JTable을 인쇄 할 때 색상이 지정된 머리말과 꼬리말을 만들려고합니다. 특히, javax.swing.JTable의 getPrintable()을보고 있지만 MessageFormat이 머리글 또는 바닥 글의 색을 지정하는 옵션을 제공하지 않습니다.머리글과 바닥 글을 컬러로 인쇄하고 있습니까?

어떻게하면됩니까?

설명 인쇄하는 동안 머리말/꼬리말을 설정하는 데 관심이 있습니다. 예를 들어, 메모장은 인쇄 할 파일 이름을 헤더로 추가합니다.

업데이트 표준 방법이없는 것처럼 보입니다. 누군가 해결 방법을 제공 할 수 있습니까? 지금까지 게시 된 유일한 대답은 머리글/바닥 글에 인쇄와 관련이 없습니다 (프린터로 보내거나 화면에 표시하지 않음).

내 의견에서 복사 : 인쇄 머리글/바닥 글에 관심이 있습니다. 예를 들어, 메모장에서 문서를 인쇄 할 때 파일 이름을 머리말 (또는 그 꼬리말로, 정확하게 기억하지 못합니다.)으로 추가합니다.

답변

3

하나의 솔루션이 자신의 인쇄를 사용하는 것입니다와에 도착하는 방법을 알려 :

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을 호출 할 때이를 사용자 정의 인쇄 가능 및 새 인쇄용 인스턴스에 삽입하십시오. 이것을 PrinterJob과 함께 사용하십시오. 당신이 원하는대로

는 이제 머리글과 바닥 글을 그릴 수 있습니다,하지만 당신은 몇 가지 물건 잃을 : 당신은 메시지의 형식을 MessageFormat의를 사용할 수 없습니다

  • 합니다. 나는 당신이 당신의 인쇄물에이 기능을 쉽게 추가 할 수 있다고 믿는다.
  • 머리글과 바닥 글이 자동으로 배치되지 않습니다. 당신은 이들에 대한 대략적인 견적을 가질 수 있습니다.

편집 : 나는 자바 소스에서 검토 한 모든 일을 민간 수준의 TablePrintable이 있습니다. 소스 코드를보고 머리글과 바닥 글이 어떻게 인쇄되는지 확인할 수 있습니다. 그런 다음이 기능을 Printable 클래스로 옮길 수 있습니다.

+0

잘 보입니다. 시도해 보겠습니다. –

0

이 코드는 주로 show.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 당신이 그것을 :) 내가 생각할 수있는

+0

을 제가 잘못 본게 아니라면, 당신은 여기에 표 머리글/바닥 글을 설정하고 있습니다. 인쇄 머리글/바닥 글에 관심이 있습니다. 예를 들어, 메모장에서 문서를 인쇄 할 때 파일 이름을 머리말 (또는 꼬리말로, 정확하게 기억하지 못합니다.)으로 추가합니다. –

0

약간 왼쪽 입력란에서 벗어 났지만 iText과 같은 라이브러리를 사용하여 PDF 문서를 만든 다음 프린터로 보낼 수 있습니다. 테이블의 행이 페이지 경계를 넘는 방식을 관리하는 기능을 포함하여 문서의 모양과 표현에 대한 제어 수준을 훨씬 높일 수 있으며 페이지 머리글과 바닥 글을 매우 쉽게 설정할 수 있습니다 .

이러한 지침에 따라 자바에서 PDF를 인쇄 할 수 있습니다 http://www.juixe.com/techknow/index.php/2008/01/17/print-a-pdf-document-in-java/

-1

그것은 쉽게 :

JTable table = new JTable(); 
      ((DefaultTableCellRenderer)table.getTableHeader().getColumnModel().getColumn(4).getHeaderRenderer()).setForeground(Color.ORANGE); 
+2

downvoted : a) 관련 없음 질문 b) 안전하지 않은 type-cast c) 널 열 머리글 렌더러에 대해 경비가없는 경우 d) ... – kleopatra

관련 문제