2013-03-18 208 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

相关问题