Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Swing使JTable列填充JScrollPane_Java_Swing_Jtable_Jscrollpane - Fatal编程技术网

Java Swing使JTable列填充JScrollPane

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();

我制作了一个显示数据库的GUI JTable。我有一个尺寸问题

我如何使JTable的列填满JScrollPane,但是如果一个表中有很多列,那么它只会保持它们的默认大小并让它们滚动

基本上

如果其中一个SQL表不填充JTable并且不需要滚动,那么我希望该JTable的列变得更大,以便它们适合

如果SQL JTable确实需要滚动,那么我只想让它保持这样,这样它就需要滚动

这是我制作JTable的代码:

        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; 而(i
import 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(选项卡