[英]how to reduce width of column and position a JTable in java at desired coordinates
i am having problem with JTable. 我在使用JTable时遇到问题。 need your help 需要你的帮助
below is snapshot of frame and pdf of the frame 下面是框架的快照和框架的pdf
here is my code 这是我的代码
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();
}
}
i want to reduce size of every column (size should be same for all) 我想减少每列的大小(所有大小均应相同)
After creating the table and setting the model you do something like: 创建表并设置模型后,您可以执行以下操作:
JTable table = new JTable(...);
TableColumnModel tcm = table.getColumnModel();
for (int i = 0; i < tcm.getColumnCount(); i++)
{
tcm.getColumn(i).setPreferredWidth(...);
}
Another option might be to use the Table Column Adjuster . 另一种选择是使用“ 表列调整器” 。 This class will set the size of the column based on the data in the column. 此类将根据列中的数据设置列的大小。 So it will ensure that all the data is visible. 因此,它将确保所有数据都是可见的。
So this is some test code, which makes use the JTable
's Printable
implementation to print the table. 因此,这是一些测试代码,它使用JTable
的Printable
实现来打印表。 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));
}
}
You may need to play around with iText a bit if you want to decrease the size of the margins 如果您想减小页边距的大小,则可能需要使用iText进行测试
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.