![](/img/trans.png)
[英]Implementing AbstractTableModel to JTable. How to add the methods?
[英]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(...)
尤其是要在滾動窗格內顯示的內容。 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.