如何在jtable中添加Table header和Scrollbar。 java

How to Add Table header and Scrollbar in jtable. java

我正在尝试在 JTABLE 中添加 Table headerScrollbar,但我没有得到我想要的。我尝试了 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);