如何减少列的宽度并在所需坐标处将JTable定位在Java中 [英] how to reduce width of column and position a JTable in java at desired coordinates

查看:51
本文介绍了如何减少列的宽度并在所需坐标处将JTable定位在Java中的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在使用JTable时遇到问题.需要您的帮助

i am having problem with JTable. need your help

  • 我希望减小每列的大小(所有大小都应相同),以便可以将其完全保存为pdf,因为当前该列占据全帧,而不能完全保存为pdf.

下面是框架的快照和框架的pdf

below is snapshot of frame and pdf of the frame

  • 我想像下面的图片一样将表格放置在中间(假设绿色边框是JFrame).目前它在框架的顶部.

这是我的代码

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.sql.*;
import java.util.*;
import javax.swing.table.*;
import javax.swing.border.*;
import com.lowagie.text.Document;
import com.lowagie.text.PageSize;
import com.lowagie.text.pdf.PdfContentByte;
import com.lowagie.text.pdf.PdfWriter;
import java.io.FileOutputStream;
import java.awt.Graphics2D;
import javax.swing.table.TableColumn;



class tt_show extends JFrame implements ItemListener,ActionListener
{

JLabel l1,l2;

Choice c1,c2,c3;

JButton b1;

Checkbox cb1,cb2;

CheckboxGroup cbg;

Container c=this.getContentPane();

Graphics g;



tt_show()
{

    setLayout(null);

    l1=new JLabel("Course");

    l2=new JLabel("Semester");

    b1=new JButton("OK");

    cbg=new CheckboxGroup();

    cb1 = new Checkbox("full",cbg,false);

    cb2 = new Checkbox("specific day",cbg,false);

    c1 = new Choice();

    c2 = new Choice();

    c3 = new Choice();

    c3.add("Monday"); c3.add("Tuesday"); c3.add("Wednesday");       c3.add("Thursday"); c3.add("Friday");

    c1.add("MCA");

    c.add(l1); c.add(l2); c.add(b1); c.add(l1); c.add(cb1); c.add(cb2);   c.add(c1); c.add(c2); //c.add(c3);

    l1.setBounds(500,160,100,100);
    c1.setBounds(700,200,100,100);

    l2.setBounds(500,260,100,100);
    c2.setBounds(700,300,100,100);

    cb1.setBounds(500,350,200,100);
    cb2.setBounds(700,350,200,100);

    b1.setBounds(600,500,100,30);

    b1.addActionListener(this);
    c1.addItemListener(this);




    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

public void itemStateChanged(ItemEvent ie)
{

    if(ie.getSource()==c1)
    {
        for(int i=0;i<5;i++)
        {
            c2.add(String.valueOf(i+1));
        }
    }
}

public void actionPerformed(ActionEvent ae)
{
    String str1="",str2="",str3="",str4="";

    str1=c1.getSelectedItem();

    str2=c2.getSelectedItem();

    str3=cbg.getSelectedCheckbox().getLabel();

    str4="select * from ";

    int count=0;

    Vector<Vector> data = new Vector<Vector>();

    Vector<String> row = new Vector<String>();

    Vector<String> cols = new Vector<String>();

    cols.add("Day  / Lecture  -->>");   cols.add("First");       cols.add("Second");  cols.add("Third");   cols.add("Fourth");  cols.add("Fifth");

    cols.add("Sixth");   cols.add("Seventh");  cols.add("Eighth");






    str4=str4+str1+str2;

    try
            {
                DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());


                Connection con =   DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","hr","hr");


                Statement stmt = con.createStatement();


                ResultSet rs = stmt.executeQuery(str4);


                while(rs.next())
                {
                        count++;

                        switch(count)
                        {
                            case 1 : row.add("Monday");
                                 //row=new Vector<String>();
                                 break;

                            case 2 : row.add("Tuesday");
                                // row=new Vector<String>();
                                 break;

                            case 3 : row.add("Wednesday");
                                 //row=new Vector<String>();
                                 break;

                            case 4 : row.add("Thursday");
                                // row=new Vector<String>();
                                 break;

                            case 5 : row.add("Friday");
                                 //row=new Vector<String>();
                                 break;
                        }


                        for(int i=1;i<=8;i++)
                        {
                            row.add(rs.getString(i));
                        }
                        data.add(row);
                        row=new Vector<String>();
                }



            }
            catch(Exception e)
            {
                //System.out.println(e.printStackTrace());
            }


            time_table ob1 =new time_table();

            ob1.setTitle("TIME TABLE ->> "+str1+"-"+str2);

            ob1.setExtendedState(JFrame.MAXIMIZED_BOTH);

            ob1.show(data,cols,str1,str2);

            ob1.setVisible(true);
















}

public static void main(String args[]) throws Exception
{

    tt_show obj = new tt_show();

    obj.setExtendedState(JFrame.MAXIMIZED_BOTH);

    obj.setTitle("TIME TABLE");

    obj.setVisible(true);
}

}


class time_table extends JFrame implements ActionListener
{

String course,sem;

JTable tab;





time_table()
{
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    JButton b1 = new JButton("Save As PDF");

    Container c=getContentPane();

    c.add(b1);



    b1.setBounds(700,700,200,30);

    b1.addActionListener(this);



}

public void show(Vector<Vector> data1,Vector<String> cols1,String s1,String s2)
{


    course=s1;

    sem=s2+".pdf";

    tab = new JTable(data1,cols1);

    TableColumn column = null;

    for(int i=1;i<=8;i++)
    {
        column = tab.getColumnModel().getColumn(i);

             column.setPreferredWidth(5);
        }


    tab.setEnabled(false);

    tab.setBorder(BorderFactory.createLineBorder(Color.green,3));

    tab.setFont(new Font("Arial",Font.PLAIN,15));

    tab.setRowHeight(30);

    tab.setGridColor(Color.red);

    JTableHeader head = tab.getTableHeader();

    head.setFont(new Font("SansSerif", Font.ITALIC, 15));

    head.setForeground(Color.magenta);

    Container c = this.getContentPane();

    c.setLayout(new BorderLayout());



    c.add("North",head);



    c.add("Center",tab);





    DefaultTableCellRenderer centerRenderer = new DefaultTableCellRenderer();

    centerRenderer.setHorizontalAlignment( SwingConstants.CENTER );

    tab.setDefaultRenderer(String.class, centerRenderer);
}

 private void print() {
Document document = new Document(PageSize.A4.rotate());
try {


  PdfWriter writer = PdfWriter.getInstance(document, new    FileOutputStream(course+sem));

  document.open();
  PdfContentByte cb = writer.getDirectContent();

  cb.saveState();
  Graphics2D g2 = cb.createGraphicsShapes(1600, 500);

  Shape oldClip = g2.getClip();
  g2.clipRect(0, 0, 1600, 1000);

  tab.print(g2);
  g2.setClip(oldClip);

  g2.dispose();
  cb.restoreState();
} catch (Exception e) {
  System.err.println(e.getMessage());
}
document.close();
}

    public void actionPerformed(ActionEvent ae)

    {

        print();    
    }
}

推荐答案

所以这是一些测试代码,该代码使用JTablePrintable实现来打印表.通常用于将表格打印到打印机,但是您可以伪造该过程

So this is some test code, which makes use the JTable's Printable implementation to print the table. This is normally used to print the table to a printer, but you can fake the process

import com.itextpdf.text.Document;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.Rectangle;
import com.itextpdf.text.pdf.PdfContentByte;
import com.itextpdf.text.pdf.PdfWriter;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.Shape;
import java.awt.print.PageFormat;
import java.awt.print.Paper;
import java.awt.print.Printable;
import java.io.FileOutputStream;
import java.util.Arrays;
import java.util.Vector;
import javax.swing.BorderFactory;
import javax.swing.JTable;
import javax.swing.SwingConstants;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.JTableHeader;

public class TestPDF {

    public static void main(String[] args) {

        Vector columnNames = new Vector();
        columnNames.add("Day  / Lecture  -->>");
        columnNames.add("First");
        columnNames.add("Second");
        columnNames.add("Third");
        columnNames.add("Fourth");
        columnNames.add("Fifth");

        columnNames.add("Sixth");
        columnNames.add("Seventh");
        columnNames.add("Eighth");

        Vector data = new Vector();
        data.add(makeRow(new String[]{"Monday", "LAB", "", "", "", "CS rashmi", "STOA", "STOA", ".NET"}));
        data.add(makeRow(new String[]{"Tuesday", ".NET", ".NET", "SC", "SC", "ADBMS", "ADBMS", "CS", "STOA"}));
        data.add(makeRow(new String[]{"Wednesday", "ADBMS", "ADBMS", "SC", "SC", ".NET", "CS", "CS", "STOA"}));
        data.add(makeRow(new String[]{"Thursday", "LAB .Net", "", "", "", "ADBMS P", ".NET", "CS", "STOA"}));
        data.add(makeRow(new String[]{"Friday", "LAV ADBMS", "", "", "", "LAB .NET", "", "", ""}));

        JTable tab = new JTable(data, columnNames);

//        for (int i = 1; i <= 8; i++) {
//            TableColumn column = tab.getColumnModel().getColumn(i);
//            column.setPreferredWidth(5);
//        }
//
//        tab.setEnabled(false);
//
        tab.setBorder(BorderFactory.createLineBorder(Color.green, 3));
        tab.setFont(new Font("Arial", Font.PLAIN, 15));
        tab.setRowHeight(30);
        tab.setGridColor(Color.red);

        JTableHeader head = tab.getTableHeader();
        head.setFont(new Font("SansSerif", Font.ITALIC, 15));
        head.setForeground(Color.magenta);

        DefaultTableCellRenderer centerRenderer = new DefaultTableCellRenderer();
        centerRenderer.setHorizontalAlignment(SwingConstants.CENTER);
        tab.setDefaultRenderer(String.class, centerRenderer);

//        JFrame frame = new JFrame();
//        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
//        frame.add(new JScrollPane(tab));
//        frame.pack();
//        frame.setLocationRelativeTo(null);
//        frame.setVisible(true);
//        JOptionPane.showMessageDialog(null, new JScrollPane(tab));
        Document document = new Document(PageSize.A4.rotate());
        try {

            PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("Test.pdf"));

            document.open();
            PdfContentByte cb = writer.getDirectContent();

            cb.saveState();
            Graphics2D g2 = cb.createGraphicsShapes(1600, 500);

            Shape oldClip = g2.getClip();
            g2.clipRect(0, 0, 1600, 1000);

            Rectangle pageSize = document.getPageSize();
            float width = pageSize.getWidth();
            float height = pageSize.getHeight();

            // Size the JTable to be the width of the page, but maintain
            // it's own overall height
            tab.setSize((int) width, tab.getPreferredSize().height);

            JTableHeader tableHeader = tab.getTableHeader();
            tableHeader.setSize((int) width, tableHeader.getPreferredSize().height);

            // Get the table's printable
            Printable printable = tab.getPrintable(JTable.PrintMode.FIT_WIDTH, null, null);

            // Create a Paper which meets the size of the available document...
            Paper paper = new Paper();
            paper.setSize(height, width);
            paper.setImageableArea(0, 0, height, width);
            // Create a PageFormat for the Paper
            PageFormat pageFormat = new PageFormat();
            pageFormat.setOrientation(PageFormat.LANDSCAPE);
            pageFormat.setPaper(paper);
            // Print each page of the table
            int pageIndex = 0;
            while (printable.print(g2, pageFormat, pageIndex) != Printable.NO_SUCH_PAGE) {
                System.out.println("Print " + pageIndex);
                printable.print(g2, pageFormat, pageIndex);
                pageIndex++;
            }
            g2.setClip(oldClip);

            g2.dispose();
            cb.restoreState();
        } catch (Exception e) {
            System.err.println(e.getMessage());
        }
        document.close();
    }

    protected static Vector makeRow(String[] values) {
        return new Vector(Arrays.asList(values));
    }

}

如果要减小页边距的大小,您可能需要使用iText一点点

You may need to play around with iText a bit if you want to decrease the size of the margins

这篇关于如何减少列的宽度并在所需坐标处将JTable定位在Java中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆