Java Swing使JTable列填充JScrollPane
我制作了一个显示数据库的GUI JTable。我有一个尺寸问题 我如何使JTable的列填满JScrollPane,但是如果一个表中有很多列,那么它只会保持它们的默认大小并让它们滚动 基本上 如果其中一个SQL表不填充JTable并且不需要滚动,那么我希望该JTable的列变得更大,以便它们适合 如果SQL JTable确实需要滚动,那么我只想让它保持这样,这样它就需要滚动 这是我制作JTable的代码:Java Swing使JTable列填充JScrollPane,java,swing,jtable,jscrollpane,Java,Swing,Jtable,Jscrollpane,我制作了一个显示数据库的GUI JTable。我有一个尺寸问题 我如何使JTable的列填满JScrollPane,但是如果一个表中有很多列,那么它只会保持它们的默认大小并让它们滚动 基本上 如果其中一个SQL表不填充JTable并且不需要滚动,那么我希望该JTable的列变得更大,以便它们适合 如果SQL JTable确实需要滚动,那么我只想让它保持这样,这样它就需要滚动 这是我制作JTable的代码: JPanel panel1 = new JPanel();
JPanel panel1 = new JPanel();
JTable table = new JTable(){
private static final long serialVersionUID = 1L;
@Override
public boolean isCellEditable(int row, int column) {
return false;
}
};
JScrollPane stable = new JScrollPane (table);
stable.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
stable.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
panel1.add(stable);
注释代码中的以下行:
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
这会使表格列拉伸以填充滚动窗格的宽度
拉伸列以适应表格的整个宽度使其看起来很难看。相反,我建议您在表中添加以下功能
这使您的jtable看起来更专业请在代码中添加以下注释:
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
import java.awt.Dimension;
import java.awt.Font;
import javax.swing.table.*;
import java.sql.Connection;
import java.sql.Statement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
public class StatusPage extends JPanel
{
static DefaultTableModel dm;
JTable table;
JScrollPane jsp_table;
static Connection conn;
static Statement stmt;
static ResultSet rs;
public StatusPage(Connection c)
{
conn = c;
String col_name[] = {"S.No.","Book Name","Author Name","ISBN","Available Book","Issue Book","Total Book"};
dm = new DefaultTableModel(null,col_name);
table = new JTable(dm);
table.getTableHeader().setFont( new Font( "Goudy Old Style" , Font.BOLD, 15 ));
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
table.getColumnModel().getColumn(0).setPreferredWidth(50);
table.getColumnModel().getColumn(1).setPreferredWidth(175);
table.getColumnModel().getColumn(2).setPreferredWidth(175);
table.getColumnModel().getColumn(3).setPreferredWidth(125);
table.getColumnModel().getColumn(4).setPreferredWidth(111);
table.getColumnModel().getColumn(5).setPreferredWidth(90);
table.getColumnModel().getColumn(6).setPreferredWidth(90);
jsp_table = new JScrollPane(table);
jsp_table.setPreferredSize(new Dimension(850, 520));
addRowTable();
add(jsp_table);
}
public static void addRowTable()
{
try
{
int a = dm.getRowCount();
int i=0;
while(i<a)
{
dm.removeRow(0);
i++;
}
stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
rs = stmt.executeQuery("SELECT * FROM BOOK_TABLE");
int count = 1;
while(rs.next())
{
String s[] = new String[7];
s[0] = ""+count;
s[1] = rs.getString(6);
s[2] = rs.getString(1);
s[3] = rs.getString(2);
s[4] = ""+rs.getInt(4);
s[5] = ""+rs.getInt(5);
s[6] = ""+rs.getInt(3);
count++;
dm.addRow(s);
}
}
catch(SQLException e)
{
e.printStackTrace();
}
}
}
这会使表格列拉伸以填充滚动窗格的宽度
拉伸列以适应表格的整个宽度使其看起来很难看。相反,我建议您在表中添加以下功能
这使您的jtable看起来更专业import java.awt.Dimension;
import java.awt.Dimension;
import java.awt.Font;
import javax.swing.table.*;
import java.sql.Connection;
import java.sql.Statement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
public class StatusPage extends JPanel
{
static DefaultTableModel dm;
JTable table;
JScrollPane jsp_table;
static Connection conn;
static Statement stmt;
static ResultSet rs;
public StatusPage(Connection c)
{
conn = c;
String col_name[] = {"S.No.","Book Name","Author Name","ISBN","Available Book","Issue Book","Total Book"};
dm = new DefaultTableModel(null,col_name);
table = new JTable(dm);
table.getTableHeader().setFont( new Font( "Goudy Old Style" , Font.BOLD, 15 ));
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
table.getColumnModel().getColumn(0).setPreferredWidth(50);
table.getColumnModel().getColumn(1).setPreferredWidth(175);
table.getColumnModel().getColumn(2).setPreferredWidth(175);
table.getColumnModel().getColumn(3).setPreferredWidth(125);
table.getColumnModel().getColumn(4).setPreferredWidth(111);
table.getColumnModel().getColumn(5).setPreferredWidth(90);
table.getColumnModel().getColumn(6).setPreferredWidth(90);
jsp_table = new JScrollPane(table);
jsp_table.setPreferredSize(new Dimension(850, 520));
addRowTable();
add(jsp_table);
}
public static void addRowTable()
{
try
{
int a = dm.getRowCount();
int i=0;
while(i<a)
{
dm.removeRow(0);
i++;
}
stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
rs = stmt.executeQuery("SELECT * FROM BOOK_TABLE");
int count = 1;
while(rs.next())
{
String s[] = new String[7];
s[0] = ""+count;
s[1] = rs.getString(6);
s[2] = rs.getString(1);
s[3] = rs.getString(2);
s[4] = ""+rs.getInt(4);
s[5] = ""+rs.getInt(5);
s[6] = ""+rs.getInt(3);
count++;
dm.addRow(s);
}
}
catch(SQLException e)
{
e.printStackTrace();
}
}
}
导入java.awt.Font;
导入javax.swing.table.*;
导入java.sql.Connection;
导入java.sql.Statement;
导入java.sql.ResultSet;
导入java.sql.SQLException;
导入javax.swing.JPanel;
导入javax.swing.JScrollPane;
导入javax.swing.JTable;
公共类状态页扩展了JPanel
{
静态模型dm;
JTable表;
JScrollPane jsp_表;
静态连接接头;
静态语句stmt;
静态结果集;
公共状态页(连接c)
{
conn=c;
字符串col_name[]={“S.No.”、“书名”、“作者名”、“ISBN”、“可用图书”、“发行图书”、“总图书”};
dm=新的DefaultTableModel(空,列名称);
表=新JTable(dm);
table.getTableHeader().setFont(新字体(“Goudy Old Style”,Font.BOLD,15));
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
table.getColumnModel().getColumn(0).setPreferredWidth(50);
table.getColumnModel().getColumn(1).setPreferredWidth(175);
table.getColumnModel().getColumn(2).setPreferredWidth(175);
table.getColumnModel().getColumn(3).setPreferredWidth(125);
table.getColumnModel().getColumn(4).setPreferredWidth(111);
table.getColumnModel().getColumn(5).setPreferredWidth(90);
table.getColumnModel().getColumn(6).setPreferredWidth(90);
jsp_table=新的JScrollPane(table);
setPreferredSize(新维度(850520));
addRowTable();
添加(jsp_表);
}
公共静态void addRowTable()
{
尝试
{
int a=dm.getRowCount();
int i=0;
而(iimport java.awt.Dimension;
导入java.awt.Font;
导入javax.swing.table.*;
导入java.sql.Connection;
导入java.sql.Statement;
导入java.sql.ResultSet;
导入java.sql.SQLException;
导入javax.swing.JPanel;
导入javax.swing.JScrollPane;
导入javax.swing.JTable;
公共类状态页扩展了JPanel
{
静态模型dm;
JTable表;
JScrollPane jsp_表;
静态连接接头;
静态语句stmt;
静态结果集;
公共状态页(连接c)
{
conn=c;
字符串col_name[]={“S.No.”、“书名”、“作者名”、“ISBN”、“可用图书”、“发行图书”、“总图书”};
dm=新的DefaultTableModel(空,列名称);
表=新JTable(dm);
table.getTableHeader().setFont(新字体(“Goudy Old Style”,Font.BOLD,15));
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
table.getColumnModel().getColumn(0).setPreferredWidth(50);
table.getColumnModel().getColumn(1).setPreferredWidth(175);
table.getColumnModel().getColumn(2).setPreferredWidth(175);
table.getColumnModel().getColumn(3).setPreferredWidth(125);
table.getColumnModel().getColumn(4).setPreferredWidth(111);
table.getColumnModel().getColumn(5).setPreferredWidth(90);
table.getColumnModel().getColumn(6).setPreferredWidth(90);
jsp_table=新的JScrollPane(table);
setPreferredSize(新维度(850520));
addRowTable();
添加(jsp_表);
}
公共静态void addRowTable()
{
尝试
{
int a=dm.getRowCount();
int i=0;
而(i要准确获得您要求的内容,请在使用新模型更新表后调用以下方法:
public static void tweakColumns(JTable table){
Enumeration<TableColumn> columns = table.getColumnModel().getColumns();
int required = 0;
while(columns.hasMoreElements()){
TableColumn column = columns.nextElement();
int width = (int)table.getTableHeader().getDefaultRenderer()
.getTableCellRendererComponent(table, column.getIdentifier()
, false, false, -1, column.getModelIndex()).getPreferredSize().getWidth();
required += width;
}
JViewport viewport = (JViewport)SwingUtilities.getAncestorOfClass(JViewport.class, table);
int viewportWidth = viewport.getWidth();
table.setAutoResizeMode(required<viewportWidth ? JTable.AUTO_RESIZE_ALL_COLUMNS : JTable.AUTO_RESIZE_OFF);
}
公共静态列(JTable表){
枚举列=table.getColumnModel().getColumns();
int required=0;
while(columns.hasMoreElements()){
TableColumn=columns.nextElement();
int width=(int)table.getTableHeader().getDefaultRenderer()
.GetTableCellRenderComponent(表,列.getIdentifier()
,false,false,-1,column.getModelIndex()).getPreferredSize().getWidth();
所需+=宽度;
}
JViewport viewport=(JViewport)SwingUtilities.getAncestorOfClass(JViewport.class,table);
int viewportWidth=viewport.getWidth();
table.setAutoResizeMode(需要以准确获取所需内容,请在使用新模型更新表后调用以下方法:
public static void tweakColumns(JTable table){
Enumeration<TableColumn> columns = table.getColumnModel().getColumns();
int required = 0;
while(columns.hasMoreElements()){
TableColumn column = columns.nextElement();
int width = (int)table.getTableHeader().getDefaultRenderer()
.getTableCellRendererComponent(table, column.getIdentifier()
, false, false, -1, column.getModelIndex()).getPreferredSize().getWidth();
required += width;
}
JViewport viewport = (JViewport)SwingUtilities.getAncestorOfClass(JViewport.class, table);
int viewportWidth = viewport.getWidth();
table.setAutoResizeMode(required<viewportWidth ? JTable.AUTO_RESIZE_ALL_COLUMNS : JTable.AUTO_RESIZE_OFF);
}
公共静态列(JTable表){
枚举列=table.getColumnModel().getColumns();
int required=0;
while(columns.hasMoreElements()){
TableColumn=columns.nextElement();
int width=(int)table.getTableHeader().getDefaultRenderer()
.GetTableCellRenderComponent(选项卡