簡體   English   中英

如何在jtable中添加表頭和滾動條。 java的

[英]How to Add Table header and Scrollbar in jtable. java

我試圖在JTABLE添加一個Table 標題Scrollbar ,但我沒有得到我想要的東西。 我嘗試了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);

要添加標題嗎

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中顯示的JTable不能正常工作。

建議:

  • 不要使用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(...) 雖然null布局和setBounds()似乎可以像創建復雜GUI的最簡單和最好的方式一樣使用Swing GUI,但是你創建的Swing GUI越多,在使用它們時就會遇到更嚴重的困難。 當GUI調整大小時,它們不會調整組件的大小,它們是增強或維護的皇室女巫,當它們放置在滾動窗格中時它們完全失敗,當它們在與原始平台不同的所有平台上查看時,它們看起來很可怕。

標題

JTable table = new JTable(model);
String cols [] = {"ID","NAME","MODEL","P_Price","S_Price","Quantity"};
model.setColumnIdentifiers(cols );

Scrollpane

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) JScrollpane. setBounds(10, 0, 457, 103)方法JScrollpane. 謝謝大家的回答。 致@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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM