[英]Why not all Java Swing JTables have focus indicator
我試圖弄清楚為什么大型應用程序中的某些JTables
具有焦點指示器而有些則沒有。 為了調試這個問題,我添加了代碼:
UIManager.put("Table.focusCellHighlightBorder",new BorderUIResource(
new LineBorder(new Color(255,0,0)));
那些焦點指標的JTables
變為紅色,但我仍然沒有看到所有JTables
的焦點指標。 知道為什么JTable
的單元格不會顯示焦點指示符嗎?
您需要在創建表之前“設置”UI屬性。
如果您仍有問題,請發布您的SSCCE ,以證明問題,因為我們無法猜測您在做什么。
也許他/她的意思(在你的例子中添加一些......)
public JavaGUI() {
CustomModel model = new CustomModel();
JTable table = new JTable(model) {
private static final long serialVersionUID = 1L;
private Border outside = new MatteBorder(1, 0, 1, 0, Color.red);
private Border inside = new EmptyBorder(0, 1, 0, 1);
private Border highlight = new CompoundBorder(outside, inside);
@Override
public Component prepareRenderer(
TableCellRenderer renderer, int row, int column) {
Component c = super.prepareRenderer(renderer, row, column);
JComponent jc = (JComponent) c;
if (isRowSelected(row)) {
jc.setBackground(Color.orange);
jc.setBorder(highlight);
} else {
jc.setBackground(Color.white);
}
return c;
}
};
for (int i = 1; i <= 16; i++) {
model.addRow(newRow(i));
}
this.add(table);
}
兩個JTable都使用了一個單元格渲染器,它繼承了DefaultTableCellRenderer並覆蓋了getTableCellRendererComponent方法。 顯示焦點指示符的JTable的重寫getTableCellRendererComponent方法稱為super.getTableCellRendererComponent方法,但是未顯示焦點指示符的JTable的重寫getTableCellRendererComponent方法未調用super.getTableCellRendererComponent方法。
帶焦點指示的JTable:
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int col) {
Component comp = super.getTableCellRendererComponent(table, value,
isSelected, hasFocus, row, col);
....
沒有焦點指示的JTable:
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected,
boolean hasFocus, int row,
int col) {
for (int i = 0; i < ids.length; i++) {
....
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.