如何在jtable中添加Table header和Scrollbar。 java
How to Add Table header and Scrollbar in jtable. java
我正在尝试在 JTABLE
中添加 Table header 和 Scrollbar,但我没有得到我想要的。我尝试了 3 种不同的程序,但没有想出正确的方法。此代码用于 Scrollbar.
谁能告诉我如何添加 header。我不能像 model.addRow()
一样添加它,因为在那之后我必须从 table 中获取值,而这种方法会产生问题。以及如何添加滚动条码。
这是我的代码
DefaultTableModel model = new DefaultTableModel();
JTable table = new JTable(model);
table.setFont(new Font("Times New Roman", Font.PLAIN, 13));
//JScrollPane scrollPane = new JScrollPane(table); //Try one
//new JScrollPane(table, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED ); // Try 2
model.addColumn("ID");
model.addColumn("NAME");
model.addColumn("MODEL");
model.addColumn("P_Price");
model.addColumn("S_Price");
model.addColumn("Quantity");
table.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
table.setBounds(10, 0, 457, 103);
//panel_1.add(new JScrollPane(table)); Try 3
//panel_1.add(scrollPane); //link to Try one
//table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); // link 2 Try 2
panel_1.add(table);
添加headers做
String [] header={"name","age"};
String [][] data={{"akash","20"},{"pankaj","24"},{"pankaj","24"},{"pankaj","24"},{"pankaj","24"}};
DefaultTableModel model = new DefaultTableModel(data,header);
添加滚动条
JScrollPane js=new JScrollPane(table);
js.setVisible(true);
add(js);
完整代码
import java.awt.Dimension;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
public class Table extends JPanel{
JTable jt;
public Table(){
String [] header={"name","age"};
String [][] data={{"akash","20"},{"pankaj","24"},{"pankaj","24"},{"pankaj","24"},{"pankaj","24"}};
DefaultTableModel model = new DefaultTableModel(data,header);
JTable table = new JTable(model);
table.setPreferredScrollableViewportSize(new Dimension(450,63));
table.setFillsViewportHeight(true);
JScrollPane js=new JScrollPane(table);
js.setVisible(true);
add(js);
}
public static void main(String [] a) {
JFrame jf=new JFrame();
Table tab= new Table();
jf.setTitle("Table");
jf.setSize(500, 500);
jf.setVisible(true);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.add(tab);
}
}
输出
我担心您可能会因为使用 null
布局和 setBounds(...)
某些不适用于大多数 Swing GUI,尤其是 JScrollPanes 中显示的 JTables 的东西而把自己搞得一团糟。
建议:
- 不要使用
null
布局,不要调用 setBounds(...)
尤其是 你想在滚动窗格中显示的内容。
- 通过 JScrollPane 的构造函数将 JTable 添加到 JScrollPane。
- 将这样创建的JScrollPane添加到在
BorderLayout.CENTER
位置使用BorderLayout
的JPanel。
例如:
import java.awt.BorderLayout;
import java.awt.Font;
import javax.swing.*;
import javax.swing.table.*;
public class Foo {
private JPanel panel_1 = new JPanel();
public Foo() {
DefaultTableModel model = new DefaultTableModel();
JTable table = new JTable(model);
table.setFont(new Font("Times New Roman", Font.PLAIN, 13));
JScrollPane scrollPane = new JScrollPane(table);
model.addColumn("ID");
model.addColumn("NAME");
model.addColumn("MODEL");
model.addColumn("P_Price");
model.addColumn("S_Price");
model.addColumn("Quantity");
panel_1.setLayout(new BorderLayout());
panel_1.add(scrollPane, BorderLayout.CENTER);
}
public JPanel getPanel1() {
return panel_1;
}
private static void createAndShowGui() {
Foo mainPanel = new Foo();
JFrame frame = new JFrame("Foo");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.getContentPane().add(mainPanel.getPanel1());
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGui();
}
});
}
}
甚至不要在您的 JScrollPane 上使用 setBounds(...)
。虽然空布局和 setBounds()
对于 Swing 新手来说似乎是创建复杂 GUI 的最简单和最好的方法,但您创建的 Swing GUI 越多,您在使用它们时就会 运行 遇到更严重的困难。它们不会在 GUI 调整大小时调整您的组件的大小,它们是皇家 来增强或维护的,它们在放置在滚动窗格中时完全失败,在与原始平台不同的所有平台上查看时它们看起来很糟糕。
Headers :
JTable table = new JTable(model);
String cols [] = {"ID","NAME","MODEL","P_Price","S_Price","Quantity"};
model.setColumnIdentifiers(cols );
滚动窗格 :
JScrollPane jsp = new JScrollPane(table);
panel1.add(jsp);
//....
add(jsp);// add scroll to frame not the panel
注:
但请记住,null layout
不被认为是一个好的程序设计,尤其是在使用 .setBounds( )
设置非顶级容器时,因为它不能保证在其他平台上的一致性组件的位置。
唯一的原因是我没有在 JScrollpane.
中添加 setBounds(10, 0, 457, 103)
方法 谢谢大家的回答。感谢@singakash
这是完整的工作代码。
DefaultTableModel model = new DefaultTableModel();
JTable table = new JTable(model);
table.setFont(new Font("Times New Roman", Font.PLAIN, 13));
model.addColumn("ID");
model.addColumn("NAME");
model.addColumn("MODEL");
model.addColumn("P_Price");
model.addColumn("S_Price");
model.addColumn("Quantity");
table.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
table.setBounds(10, 0, 457, 103);
JScrollPane jp=new JScrollPane(table);
jp.setBounds(10, 0, 457, 103);
jp.setVisible(true);
add(jp);
panel_1.add(jp);
我正在尝试在 JTABLE
中添加 Table header 和 Scrollbar,但我没有得到我想要的。我尝试了 3 种不同的程序,但没有想出正确的方法。此代码用于 Scrollbar.
谁能告诉我如何添加 header。我不能像 model.addRow()
一样添加它,因为在那之后我必须从 table 中获取值,而这种方法会产生问题。以及如何添加滚动条码。
这是我的代码
DefaultTableModel model = new DefaultTableModel();
JTable table = new JTable(model);
table.setFont(new Font("Times New Roman", Font.PLAIN, 13));
//JScrollPane scrollPane = new JScrollPane(table); //Try one
//new JScrollPane(table, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED ); // Try 2
model.addColumn("ID");
model.addColumn("NAME");
model.addColumn("MODEL");
model.addColumn("P_Price");
model.addColumn("S_Price");
model.addColumn("Quantity");
table.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
table.setBounds(10, 0, 457, 103);
//panel_1.add(new JScrollPane(table)); Try 3
//panel_1.add(scrollPane); //link to Try one
//table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); // link 2 Try 2
panel_1.add(table);
添加headers做
String [] header={"name","age"};
String [][] data={{"akash","20"},{"pankaj","24"},{"pankaj","24"},{"pankaj","24"},{"pankaj","24"}};
DefaultTableModel model = new DefaultTableModel(data,header);
添加滚动条
JScrollPane js=new JScrollPane(table);
js.setVisible(true);
add(js);
完整代码
import java.awt.Dimension;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
public class Table extends JPanel{
JTable jt;
public Table(){
String [] header={"name","age"};
String [][] data={{"akash","20"},{"pankaj","24"},{"pankaj","24"},{"pankaj","24"},{"pankaj","24"}};
DefaultTableModel model = new DefaultTableModel(data,header);
JTable table = new JTable(model);
table.setPreferredScrollableViewportSize(new Dimension(450,63));
table.setFillsViewportHeight(true);
JScrollPane js=new JScrollPane(table);
js.setVisible(true);
add(js);
}
public static void main(String [] a) {
JFrame jf=new JFrame();
Table tab= new Table();
jf.setTitle("Table");
jf.setSize(500, 500);
jf.setVisible(true);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.add(tab);
}
}
输出
我担心您可能会因为使用 null
布局和 setBounds(...)
某些不适用于大多数 Swing GUI,尤其是 JScrollPanes 中显示的 JTables 的东西而把自己搞得一团糟。
建议:
- 不要使用
null
布局,不要调用setBounds(...)
尤其是 你想在滚动窗格中显示的内容。 - 通过 JScrollPane 的构造函数将 JTable 添加到 JScrollPane。
- 将这样创建的JScrollPane添加到在
BorderLayout.CENTER
位置使用BorderLayout
的JPanel。
例如:
import java.awt.BorderLayout;
import java.awt.Font;
import javax.swing.*;
import javax.swing.table.*;
public class Foo {
private JPanel panel_1 = new JPanel();
public Foo() {
DefaultTableModel model = new DefaultTableModel();
JTable table = new JTable(model);
table.setFont(new Font("Times New Roman", Font.PLAIN, 13));
JScrollPane scrollPane = new JScrollPane(table);
model.addColumn("ID");
model.addColumn("NAME");
model.addColumn("MODEL");
model.addColumn("P_Price");
model.addColumn("S_Price");
model.addColumn("Quantity");
panel_1.setLayout(new BorderLayout());
panel_1.add(scrollPane, BorderLayout.CENTER);
}
public JPanel getPanel1() {
return panel_1;
}
private static void createAndShowGui() {
Foo mainPanel = new Foo();
JFrame frame = new JFrame("Foo");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.getContentPane().add(mainPanel.getPanel1());
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGui();
}
});
}
}
甚至不要在您的 JScrollPane 上使用 setBounds(...)
。虽然空布局和 setBounds()
对于 Swing 新手来说似乎是创建复杂 GUI 的最简单和最好的方法,但您创建的 Swing GUI 越多,您在使用它们时就会 运行 遇到更严重的困难。它们不会在 GUI 调整大小时调整您的组件的大小,它们是皇家 来增强或维护的,它们在放置在滚动窗格中时完全失败,在与原始平台不同的所有平台上查看时它们看起来很糟糕。
Headers :
JTable table = new JTable(model);
String cols [] = {"ID","NAME","MODEL","P_Price","S_Price","Quantity"};
model.setColumnIdentifiers(cols );
滚动窗格 :
JScrollPane jsp = new JScrollPane(table);
panel1.add(jsp);
//....
add(jsp);// add scroll to frame not the panel
注:
但请记住,null layout
不被认为是一个好的程序设计,尤其是在使用 .setBounds( )
设置非顶级容器时,因为它不能保证在其他平台上的一致性组件的位置。
唯一的原因是我没有在 JScrollpane.
中添加 setBounds(10, 0, 457, 103)
方法 谢谢大家的回答。感谢@singakash
这是完整的工作代码。
DefaultTableModel model = new DefaultTableModel();
JTable table = new JTable(model);
table.setFont(new Font("Times New Roman", Font.PLAIN, 13));
model.addColumn("ID");
model.addColumn("NAME");
model.addColumn("MODEL");
model.addColumn("P_Price");
model.addColumn("S_Price");
model.addColumn("Quantity");
table.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
table.setBounds(10, 0, 457, 103);
JScrollPane jp=new JScrollPane(table);
jp.setBounds(10, 0, 457, 103);
jp.setVisible(true);
add(jp);
panel_1.add(jp);