当 Java Swing 中某一列的宽度发生变化时,如何仅将调整应用于 JTable 的下一列?
java 8object oriented programmingprogrammingswing
要仅将调整应用于下一列,请使用 setAutoResizeMode 并设置模式。此处的模式为 AUTO_RESIZE_NEXT_COLUMN。这将允许您仅调整下一列,即使拖动任何列标题来调整大小。
让我们首先看一个创建表格的示例 −
示例
package my; import java.awt.Font; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.table.DefaultTableModel; public class SwingDemo { public static void main(String[] argv) throws Exception { DefaultTableModel tableModel = new DefaultTableModel(); JTable table = new JTable(tableModel); tableModel.addColumn("Technology"); tableModel.addColumn("BCA"); tableModel.addColumn("MCA"); tableModel.addColumn("Lectures"); // 仅对下一列应用调整 table.setAutoResizeMode(JTable.AUTO_RESIZE_NEXT_COLUMN); tableModel.addRow(new Object[] { "F#", "Yes", "No", "20"}); tableModel.addRow(new Object[] { "Blockchain", "Yes", "No", "30"}); tableModel.addRow(new Object[] { "SharePoint", "Yes", "Yes", "25"}); tableModel.addRow(new Object[] { "AWS", "No", "Yes", "25"}); tableModel.addRow(new Object[] { "Python", "Yes", "No", "20"}); tableModel.addRow(new Object[] { "Scala", "Yes", "No", "30"}); tableModel.addRow(new Object[] { "Swift", "No", "Yes", "35"}); tableModel.addRow(new Object[] { "C#", "Yes", "Yes", "50"}); tableModel.addRow(new Object[] { "NodeJS", "No", "Yes", "40"}); tableModel.addRow(new Object[] { "MVC", "Yes", "No", "30"}); tableModel.addRow(new Object[] { "ASP.NET", "Yes", "Yes", "35"}); tableModel.addRow(new Object[] { "Java", "Yes", "No", "55"}); tableModel.addRow(new Object[] { "jQuery", "Yes", "Yes", "30"}); Font font = new Font("Verdana", Font.PLAIN, 12); table.setFont(font); JFrame frame = new JFrame(); frame.setSize(600, 400); frame.add(new JScrollPane(table)); frame.setVisible(true); } }
输出
现在,如果您要调整任何列(在本例中为 BCA)的大小,则所有调整都会影响该列本身以及下一列(在本例中为 MCA)−