2013-01-24 57 views
2

我正在製作一個保持出席的應用程序。一旦我有了一份學生名單,我將如何去展示他們全部並檢查他們是否存在或缺席。我原本以爲JTable會工作,但將世界各地的組件添加到JTable並不是世界上最簡單的事情。有沒有更簡單的方法來解決這個問題?下面的圖片大致顯示了我所描繪的內容,但如果您有不同的想法,請隨時分享。謝謝!如何組織我的考勤計劃

enter image description here

+0

_I intially想到的JTable會的工作,但它不是世界上最容易的事情擺組件添加到JTable._爲什麼你是這麼認爲的嗎? – Amarnath

+0

['CheckOne'](http://stackoverflow.com/a/7920159/230513)是使用'JChckbox'的基本示例;一些'JRadioButton'選項被引用[在這裏](http://stackoverflow.com/a/11173600/230513)。 – trashgod

回答

2

enter image description here

這裏是一個EG向您展示如何使用JTable

我一直一個布爾值ABS/Present coloumn,通過@Hendrik埃伯斯的建議,它就會自動爲CheckBox。 首先,你必須設置使用fooTable.setModel(dataModel)JTabel的模型,

事情是這樣的:

jTable1.setModel(new javax.swing.table.DefaultTableModel(
     new Object [][] { 
      {"Joel", "Hails", new Integer(1011001), new Boolean(true)}, 
      {"James", "Roggers", new Integer(1912212), null}, 
      {"Rehy", "Gomes", new Integer(1121212), new Boolean(true)}, 
      {"Sunil", "gawas", new Integer(9909090), null} 
     }, 
     new String [] { 
      "1st name", "last name", "ID/NUMBER", "ABS/Present" 
     } 
    ) 

new Object [][]我有我的所有數據,並new String []將有列名。

休息,你可以找到

http://docs.oracle.com/javase/tutorial/uiswing/components/table.html

自己嘗試更多信息,請的源代碼,如果你有任何問題。

UPDATE:

你可以試試這個:

import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JScrollPane; 
import javax.swing.JTable; 
import javax.swing.table.AbstractTableModel; 
import java.awt.Dimension; 
import java.awt.GridLayout; 
import javax.swing.SwingUtilities; 

public class NewJFrame3 extends JPanel { 

public NewJFrame3() { 
super(new GridLayout(1,0)); 
JTable table = new JTable(new MyTableModel()); 
table.setPreferredScrollableViewportSize(new Dimension(500, 70)); 
table.setFillsViewportHeight(true); 

JScrollPane scrollPane = new JScrollPane(table); 

add(scrollPane); 
} 
class MyTableModel extends AbstractTableModel { 
private String[] columnNames = {"1st Name", 
"Last Name", 
"ID/NUMBER", 
"PRESENT"}; 
private Object[][] data = { 
{"Joel", "Hails", 
"110023", new Boolean(false)}, 
{"John", "Doe", 
"343409", new Boolean(true)}, 
{"Sue", "well", 
"899800", new Boolean(false)}, 
{"Jane", "White", 
"990909", new Boolean(true)}, 

}; 
public int getColumnCount() { 
return columnNames.length; 
} 
public int getRowCount() { 
return data.length; 
} 
public String getColumnName(int col) { 
return columnNames[col]; 
} 
    public Object getValueAt(int row, int col) { 
    return data[row][col]; 
    } 

public Class getColumnClass(int c) { 
    return getValueAt(0, c).getClass(); 
    } 




} 

private static void createAndShowGUI() { 
//Create and set up the window. 
JFrame frame = new JFrame("TableDemo"); 
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
//Create and set up the content pane. 
NewJFrame3 newContentPane = new NewJFrame3(); 
newContentPane.setOpaque(true); //content panes must be opaque 
frame.setContentPane(newContentPane); 
//Display the window. 
frame.pack(); 
frame.setVisible(true); 
} 
public static void main(String[] args) { 

SwingUtilities.invokeLater(new Runnable() { 
public void run() { 
createAndShowGUI(); 
} 
}); 
} 
} 
+0

我確實有一些問題。我試着做你在這裏做的(http://pastebin.com/u0w4tcLq)。但是,我得到了這個結果(http://imageshack.us/scaled/landing/407/jtable.png)。沒有標題和沒有渲染的複選框。 –

+0

我通過將表添加到滾動窗格來解決標題問題,但仍然沒有複選框。 –

+0

@ JoelA.Christophel請在此更新完整的源代碼**。不要提供該鏈接,並且您已經學習了教程?請複製粘貼您的完整源代碼(我的意思是在您的問題中更新)。 –

2

我的建議是,使用複選框,而不是兩個單選框控件。它的更好看。

並檢查呈現的用戶。

+0

這應該在評論中。 –

+1

只需使用「當前」列的布爾值。數據將自動顯示爲複選框。如果複選框沒有被選中,學生就缺席 –

+0

@HendrikEbbers我認爲RadioButton看起來比使用CheckBox更有前途。 – Amarnath

2

AFAIK前3列看起來很正常。但是第四欄是我認爲你被卡住的地方。

閱讀關於Renderer and EditorJTable

我認爲渲染一個JPanel到最後一列就可以了。在那JPanel上加兩個JRadioButton's。

這樣做的一個例子顯示爲herehere

P.S:我試過這種方法,它的工作原理。

+0

感謝您的信息。 +1我從你的回答中瞭解了渲染和編輯器。不過,我要去用joey提供的cop-out解決方案。 –