如何在jtable中添加表头和滚动条.java的

Adn*_*Ali 8 java swing jtable scrollbar

我想添加一个表滚动条JTABLE,但我没有得到我想要的东西.我尝试了3种不同的程序,但没有找到合适的程序.此代码适用于滚动条.

任何人都可以告诉我如何添加标题.我无法添加它,model.addRow()因为之后我必须从表中获取值,这个方法会产生问题.以及如何添加滚动条形码.

这是我的代码

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);
Run Code Online (Sandbox Code Playgroud)

sin*_*ash 11

要添加标题吗

String [] header={"name","age"};
String [][] data={{"akash","20"},{"pankaj","24"},{"pankaj","24"},{"pankaj","24"},{"pankaj","24"}};
DefaultTableModel model = new DefaultTableModel(data,header);  
Run Code Online (Sandbox Code Playgroud)

要添加滚动条吗

JScrollPane js=new JScrollPane(table);
js.setVisible(true);
add(js);
Run Code Online (Sandbox Code Playgroud)

完整代码

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




    }

}
Run Code Online (Sandbox Code Playgroud)

产量

在此输入图像描述


Hov*_*els 6

我担心你可能会通过使用null布局setBounds(...)来解决问题,而且对于大多数Swing GUI,特别是JScrollPanes中显示的JTable,它们都不能正常工作.

建议:

  • 不要使用null布局,不要setBounds(...) 特别调用要在滚动窗格内显示的内容.
  • 通过JScrollPane的构造函数将JTable添加到JScrollPane.
  • 将这样创建的JScrollPane添加到BorderLayout在该BorderLayout.CENTER位置使用的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();
         }
      });
   }
}
Run Code Online (Sandbox Code Playgroud)

甚至不要setBounds(...)在你的JScrollPane上使用.虽然null布局和setBounds()Swing新手似乎是创建复杂GUI的最简单和最好的方法,但是你创建的Swing GUI越多,你在使用它们时会遇到更严重的困难.当GUI调整大小时,它们不会调整组件的大小,它们是增强或维护的皇室女巫,当它们放置在滚动窗格中时它们完全失败,当它们在与原始平台不同的所有平台上查看时,它们看起来很可怕.