回答
因此,對於電池的渲染責任歸結到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. Advanceddatagrid單元格填充
- 2. 使用空格填充單詞以填充單元格
- 3. JTable填充類
- 4. 如何填充表格中每個單元格的填充?
- 5. 使textarea填充表格單元格
- 6. R:遞增填充向量
- 7. JTable模型填充
- 8. SpreadSheet單元格自動填充另一個單元格的值
- 9. Excel VBA:用相鄰單元格值填充空單元格
- 10. 如何將NSTableView單元格添加到單元格的填充?
- 11. 基於父單元格的自動填充單元格
- 12. 使用Firebase填充陣列填充原型單元格
- 13. EXCEL - 下拉和填充單元格
- 14. CSS - 按鈕不填充表單元格
- 15. 從SWAPI的resultsarray填充表格單元
- 16. 使Silverlight DataGridCell內容填充單元格?
- 17. 填充特定的空單元格
- 18. 在Access中自動填充單元格
- 19. Collectionview沒有填充單元格標籤
- 20. 如何用圖像填充單元格
- 21. 使用VBA填充特定單元格
- 22. TableView單元格填充屏幕Swift
- 23. GWT流表填充單元格
- 24. 檢查單元格是否填充
- 25. 填充單元格爲純文本
- 26. 使圖像完全填充單元格
- 27. 前景2007忽略單元格填充
- 28. 在excel表格(或SQLite)中填充空單元格的最近填充單元格的值高於
- 29. 量角器E2E測試角UI網格單元填充
- 30. 計算填充顏色的單元格的數量
有很多方法可以做到這一點。細胞的價值需要是標記,其餘的是微不足道的塗料代碼 – MadProgrammer
我知道已經有很多我認爲......問題是我需要知道「微不足道的塗料代碼」,以及它放在哪裏。 @override油漆?對不起,我對Java和JTable真的很陌生。所以一個簡單的例子會變得簡單。 – KyleK
那麼,渲染一個單元格的責任歸結爲'TableCellRenderer',因此推測這將是一個開始的地方;) – MadProgrammer