2013-03-18 55 views
-1

我正在使用模型,我可以刷新表的內容?但是我將它添加到JPanel中,現在我的第二個JPanel包含了按鈕,它非常深入。我使用GridLayout來控制列的大小(preferredSize())。在開始我http://www.funkyimg.com/u2/3264/877/343679Untitled.jpg,然後我必須手動使它更大,以我從以前的帖子使用http://www.funkyimg.com/u2/3264/878/776480Untitled2.jpg源代碼,略作修改:我可以爲DefaultTableModel定義大小嗎?

public class Arsti3 { 
JFrame main = new JFrame("Arst"); 
JPanel tP = new JPanel(new GridLayout(1,0)); 
JPanel bP = new JPanel(); 
JButton one = new JButton("Test"); 
JButton two = new JButton("Two"); 
JTable table = new JTable(); 
DefaultTableModel model; 
Vector columnNames = new Vector(); 
Vector data = new Vector(); 

Arsti3() { 
    main.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    main.setSize(840,400); 
    try { 
     reloadData(); 
     model = new DefaultTableModel(data,columnNames); 
     table.setModel(model); 

     //table.setRowHeight(24); 
     table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); 
     TableColumn col; 
     for(int i=0; i<table.getColumnCount(); i++) { 
      col = table.getColumnModel().getColumn(i); 
      col.setPreferredWidth(100); 
      col.setMaxWidth(500); 
     } 
     //table.setPreferredScrollableViewportSize(new Dimension(500,500)); 
     //model.fireTableDataChanged(); 
     tP.add(new JScrollPane(table)); 
     bP.add(one); 
     bP.add(two); 
     main.add(tP,BorderLayout.NORTH); 
     main.add(bP,BorderLayout.SOUTH); 
    } catch(Exception e) { 
     e.printStackTrace(); 
    } 
    main.setVisible(true); 

} 

private void reloadData() throws ClassNotFoundException, SQLException { 
    columnNames.clear(); 
    data.clear(); 
    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 
    String Base = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)}; DBQ=SL.mdb"; 
    Connection con = DriverManager.getConnection(Base,"",""); 
    Statement st = con.createStatement(); 
    ResultSet res = st.executeQuery("SELECT * FROM Arsti"); 
    ResultSetMetaData rsmd = res.getMetaData(); 
    int column = rsmd.getColumnCount();   
    columnNames.addElement("ID"); 
    columnNames.addElement("Vards"); 
    columnNames.addElement("Uzvards"); 
    columnNames.addElement("Dzimums"); 
    columnNames.addElement("Personas kods"); 
    columnNames.addElement("Telefona numurs"); 
    columnNames.addElement("Nodalas ID"); 
    columnNames.addElement("Amata ID"); 
    while(res.next()) { 
     Vector row = new Vector(column); 
     for(int i=1; i<=column; i++) { 
      row.addElement(res.getObject(i)); 
     } 
     data.addElement(row); 
    } 
} 

public static void main(String[] args) { 
    new Arsti3(); 
} 
} 
+0

我是如何使用的,而不是JPG PNG勸我認爲首先檢查當前的圖像。我結束了一個沒有英文文本的網站,除了提示'點擊某件事物'而沒有圖片。我離開了! – 2013-03-18 18:52:22

+0

爲了更快得到更好的幫助,請發佈[SSCCE](http://sscce.org/)。 – 2013-03-18 18:53:16

+0

-1不是學(如我在你的最後一個問題說:你_must not_更改數據結構下的TableModel的腳,而不是進行重裝與模型API) – kleopatra 2013-03-18 18:55:49

回答

3

榮譽爲使用layout,但不要忘了pack()的附上Window。此外,

  • setPreferredScrollableViewportSize()是有點任意的,所以你不妨讓Dimension東西的整數倍。

  • Swing GUI對象應該在event dispatch thread上構建和操縱只有

  • 使用model.setRowCount(0)清除您的模型,而不是每次都更換它。

image

import java.awt.BorderLayout; 
import java.awt.Dimension; 
import java.awt.EventQueue; 
import java.awt.GridLayout; 
import java.util.Vector; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JScrollPane; 
import javax.swing.JTable; 
import javax.swing.table.DefaultTableModel; 
import javax.swing.table.TableColumn; 

public class Arsti3 { 

    private static final int WIDE = 100; 
    private JFrame main = new JFrame("Arst"); 
    private JPanel tP = new JPanel(new GridLayout()); 
    private JPanel bP = new JPanel(); 
    private JButton one = new JButton("One"); 
    private JButton two = new JButton("Two"); 
    private Vector<String> columnNames = new Vector<String>(); 
    private Vector<Object> data = new Vector<Object>(); 
    private DefaultTableModel model = new DefaultTableModel(data, columnNames); 
    private JTable table = new JTable(); 

    Arsti3() { 
     reloadData(); 
     table.setModel(model); 
     table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); 
     for (int i = 0; i < table.getColumnCount(); i++) { 
      TableColumn col = table.getColumnModel().getColumn(i); 
      col.setPreferredWidth(WIDE); 
      col.setMaxWidth(WIDE * 5); 
     } 
     table.setPreferredScrollableViewportSize(new Dimension(
      table.getColumnCount() * WIDE, table.getRowHeight() * 16)); 
     tP.add(new JScrollPane(table)); 
     bP.add(one); 
     bP.add(two); 
     main.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     main.add(tP, BorderLayout.CENTER); 
     main.add(bP, BorderLayout.SOUTH); 
     main.pack(); 
     main.setVisible(true); 

    } 

    private void reloadData() { 
     // could be factored out 
     columnNames.clear(); 
     columnNames.addElement("ID"); 
     columnNames.addElement("Vards"); 
     columnNames.addElement("Uzvards"); 
     columnNames.addElement("Dzimums"); 
     columnNames.addElement("Personas kods"); 
     columnNames.addElement("Telefona numurs"); 
     columnNames.addElement("Nodalas ID"); 
     columnNames.addElement("Amata ID"); 
     model.setRowCount(0); // clear rows 
     // add rows here 
    } 

    public static void main(String[] args) { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       new Arsti3(); 
      } 
     }); 
    } 
} 
+0

java.lang.Integer不能轉換爲java.util.Vector – usr999 2013-04-05 18:37:13

+0

我不明白。請修改您的問題以顯示您當前的方法。 – trashgod 2013-04-05 19:42:31

+0

謝謝,我擺脫了錯誤) – usr999 2013-04-05 19:58:58

相關問題