我想創建一個帶有JButton的幾列的JTable。我可以在JTable單元格中創建JCheckBoxes和JComboBoxes,但不能創建JButtons。我該怎麼做呢 ?定製的JTable外觀
1
A
回答
1
在我的項目,這是我的3列,其中第一列的每一行中JToggleButton
做了一個4行的表:
必需的對象...
private JTable table1;
private DefaultTableModel table1Model;
private JScrollPane scrollPane1;
String[] columnName = {"Button", "Boolean", "Int" };
當我們創建表的代碼...
{
JToggleButton[] jTableButton = new JToggleButton[] { new JToggleButton("one"), new JToggleButton("two"), new JToggleButton("three"), new JToggleButton("four")};
table1Model =
new DefaultTableModel(
new Object[][] { { jTableButton[0], false, 1 },
{ jTableButton[1], false, 1 },
{ jTableButton[2], false, 1 },
{ jTableButton[3], false, 1 }},
columnName);
table1 = new JTable(table1Model){
/**
*
*/
private static final long serialVersionUID = 1L;
@Override
public boolean isCellEditable(int rowIndex, int colIndex) {
int value = (Integer) table1Model.getValueAt(rowIndex, 2);
String blueColor = Color.BLUE;
String redColor = Color.RED;
String selectedColor = Color.GREEN;
String colorValue = selectedColor;
if (value > 0) {
colorValue = blueColor; //blue
}
else {
colorValue = redColor; //red
}
return !colorValue.equals(redColor); // Disallow the editing of red cell
}
@Override
public Class<?> getColumnClass(int c) {
return getValueAt(0, c).getClass();
}
@Override
public Component prepareRenderer(TableCellRenderer renderer,int rowIndex, int vColIndex)
{
int value = (Integer) table1Model.getValueAt(rowIndex, 2);
String blueColor = Color.BLUE;
String redColor = Color.RED;
String selectedColor = Color.GREEN;
String colorValue = selectedColor;
if (value > 0) {
colorValue = blueColor; //blue
}
else {
colorValue = redColor; //red
}
Component c = super.prepareRenderer(renderer, rowIndex, vColIndex);
if (!isCellSelected(rowIndex, vColIndex))
{
if (vColIndex != 0) {
c.setEnabled(!colorValue.equals(redColor));
}
else {
c.setEnabled(!colorValue.equals(redColor));
if (colorValue.equals(redColor))
c.setBackground(Color.decode(colorValue));
}
if (c instanceof JToggleButton && vColIndex == 0){
JToggleButton button = (JToggleButton) c;
button.setToolTipText(((JToggleButton) c).getText());
}
if ( Color.decode(colorValue).getRed() >= 224
&& Color.decode(colorValue).getGreen() >= 224
&& Color.decode(colorValue).getBlue() >= 224){
c.setForeground(Color.gray);
}
else {
c.setForeground(Color.white);
}
}
return c;
}
};
scrollPane1.setViewportView(table1);
table1.setPreferredSize(new java.awt.Dimension(187,290));
table1.setFont(new java.awt.Font("Segoe UI",0,14));
table1.getColumnModel().getColumn(0).setCellRenderer(new JToggleButtonRenderer());
}
JToggleButtonRenderer.java
下class JToggleButtonRenderer extends JToggleButton implements TableCellRenderer {
/**
*
*/
private static final long serialVersionUID = 1L;
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
if (value == null)
return null;
if (isSelected) {
// cell (and perhaps other cells) are selected
}
if (hasFocus) {
// this cell is the anchor and the table has the focus
}
return (Component) value;
}
// The following methods override the defaults for performance reasons
@Override
public void validate() {}
@Override
public void revalidate() {}
@Override
protected void firePropertyChange(String propertyName, Object oldValue, Object newValue) {}
@Override
public void firePropertyChange(String propertyName, boolean oldValue, boolean newValue) {}
}
正如你所看到的,重要的部分是表模型,table1Model
要添加一個新的行...
//id is something you want put on the button text
table1Model.addRow(new Object[] { new JToggleButton(id), false, 1});
編輯:
新增失蹤JToggleButton中單元格渲染器
+1
錯誤的答案有幾個原因:a)永遠不會在模型中存儲組件!該模型用於由呈現器提供的組件呈現的數據b)永遠不會爲應用程序需要爲JTable(或任何其他JSomething)子類,特別是不用於執行奇怪的硬編碼的值到視覺屬性映射 – kleopatra 2011-04-30 13:43:54
相關問題
- 1. 創建定製的外觀一個JTable和感覺
- 2. JTable和外觀和感覺
- 3. JTable外觀和感覺
- 4. 定製datepicker的外觀
- 5. 更改JTable的外觀和感覺
- 6. JTable行標題的外觀和感覺
- 7. 定製IKImageBrowserView組外觀
- 8. 更新定製NSWindow外觀
- 9. 插圖定製Synth外觀
- 10. 在外觀更新後刷新JTable
- 11. 如何在Nimbus外觀中添加JTable標題的內容外觀和感覺
- 12. 如何定製jquery.perfect-scrollbar的外觀?
- 13. 我如何定製Google Checkout的外觀?
- 14. 我如何定製JComboBox的外觀?
- 15. 誰應該定製CustomUIView的外觀
- 16. 定製f.file.field的外觀在軌道上
- 17. 定製的UIButton外觀在夫特2.0
- 18. 了JavaFx定製按鈕的外觀
- 19. 定製JTable
- 20. 定製jTable
- 21. eclipse外觀和感覺定製
- 22. 用Java定製Matlab按鈕外觀
- 23. 如何保持JTable自定義渲染器在窗口大小上的外觀?
- 24. KendoTabstrip的自定義外觀
- 25. 自定義UIActivityViewController的外觀
- 26. Jtable編輯單元格的外觀和感覺
- 27. VBA複製外觀功能
- 28. Java JTable定製設計
- 29. 如何在使用JTattoo外觀時更改JTable標題字體
- 30. 水平滾動在JTable中與Nimbus外觀
請參見[表格按鈕列](http://tips4java.wordpress.c OM/2009/07/12 /表鍵式柱/);作者很快就會出現。 :-) – trashgod 2011-03-17 03:10:10