gpt4 book ai didi

java - 如何减少列的宽度并将java中的JTable定位在所需的坐标处

转载 作者:行者123 更新时间:2023-12-01 18:09:51 29 4
gpt4 key购买 nike

我在使用 JTable 时遇到问题。需要你的帮助

  • 我想减小每列的大小(所有列的大小应该相同),以便它可以完全保存在 pdf 中,因为目前它占据全帧并且没有完全保存在 pdf 中。

下面是框架的快照和框架的 pdf enter image description here enter image description here

  • 我想将表格放在中心,如下图所示(假设绿色边框是 JFrame)。目前它位于框架的顶部。

enter image description here

这是我的代码

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)

创建表格并设置模型后,您可以执行以下操作:

JTable table = new JTable(...);
TableColumnModel tcm = table.getColumnModel();

for (int i = 0; i < tcm.getColumnCount(); i++)
{
tcm.getColumn(i).setPreferredWidth(...);
}

另一个选择可能是使用 Table Column Adjuster 。此类将根据列中的数据设置列的大小。这样就保证了所有的数据都是可见的。

关于java - 如何减少列的宽度并将java中的JTable定位在所需的坐标处,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33861190/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com