回答
因此,對於電池的渲染責任歸結到TableCellRenderer
,看看Using Custom Renderers,Concepts: Editors and Renderers和How to Use Tables瞭解更多詳情
其餘歸結爲簡單的風俗畫,看看Painting in AWT and Swing,Performing Custom Painting和2D Graphics更多細節
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.Timer;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellRenderer;
public class Test {
public static void main(String[] args) {
new Test();
}
public Test() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
ex.printStackTrace();
}
JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new TestPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class TestPane extends JPanel {
public TestPane() {
setLayout(new BorderLayout());
DefaultTableModel model = new DefaultTableModel(1, 1);
model.setValueAt(0, 0, 0);
JTable table = new JTable(model);
table.getColumnModel().getColumn(0).setCellRenderer(new ProgressTableCellRenderer());
add(new JScrollPane(table));
Timer timer = new Timer(500, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Integer value = (Integer)table.getValueAt(0, 0);
value++;
if (value > 100) {
value = 100;
((Timer)e.getSource()).stop();
}
System.out.println(value);
table.setValueAt(value, 0, 0);
}
});
timer.start();
}
}
public class ProgressTableCellRenderer extends JPanel implements TableCellRenderer {
private int progressValue;
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
if (value instanceof Integer) {
progressValue = (Integer)value;
}
return this;
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g.create();
g2d.setColor(UIManager.getColor("List.selectionBackground"));
int x = (int) (getWidth() * (progressValue/100d));
g2d.fillRect(0, 0, x, getHeight());
g2d.dispose();
}
}
}
感謝您花時間領導Java noob!我仍然不確定我是否喜歡Java。它非常令人沮喪lol – KyleK
問題:由100d劃分。我如何填寫自己的變量並使其工作?因爲我想獲得我擁有的最高價值,並根據最大值計算所有其他價值。但是當我在那裏放入maxVolume變量時,單元格不繪製。 – KyleK
使您的值標準化,使其在0-1(或更容易的0-100)之間變化,這會讓渲染器更輕鬆地完成它的工作 – MadProgrammer
- 1. 向量填充JTable?
- 2. JTable填充行的空單元驗證
- 3. 在選中單元格後停止移除JTable單元格填充
- 4. 用大量行填充JTable
- 5. Advanceddatagrid單元格填充
- 6. 垂直單元格填充
- 7. 填充UITableView單元格iOS8
- 8. Phpexcel填充空單元格
- 9. 使用空格填充單詞以填充單元格
- 10. JTable填充類
- 11. 如何填充表格中每個單元格的填充?
- 12. 如何增加jquery數據表中的單元格填充?
- 13. 填充PDFP表格單元格用點
- 14. 使textarea填充表格單元格
- 15. 單擊時填充單元格
- 16. R:遞增填充向量
- 17. SASS中的增量填充
- 18. 如何在Excel的不同單元格中用增量值填充空白單元格?
- 19. 從postgresql填充jTable
- 20. JTable模型填充
- 21. 根據一個單元格的值填充日期單元格?
- 22. 如何將NSTableView單元格添加到單元格的填充?
- 23. SpreadSheet單元格自動填充另一個單元格的值
- 24. Excel VBA:用相鄰單元格值填充空單元格
- 25. 自動填充另一個單元格的單元格值
- 26. 根據其他單元格的內容填充單元格
- 27. 基於父單元格的自動填充單元格
- 28. 用填充圖案填充DataGridView單元格
- 29. 使用Firebase填充陣列填充原型單元格
- 30. 填充TableView單元格查詢
有很多方法可以做到這一點。細胞的價值需要是標記,其餘的是微不足道的塗料代碼 – MadProgrammer
我知道已經有很多我認爲......問題是我需要知道「微不足道的塗料代碼」,以及它放在哪裏。 @override油漆?對不起,我對Java和JTable真的很陌生。所以一個簡單的例子會變得簡單。 – KyleK
那麼,渲染一個單元格的責任歸結爲'TableCellRenderer',因此推測這將是一個開始的地方;) – MadProgrammer