Ich erfolgreich Kontrollkästchen in JTable Spalte hinzufügen. aber ich möchte mein benutzerdefiniertes Kontrollkästchen verwenden, ich änderte BooleanRender, um mein benutzerdefiniertes Kontrollkästchen zu erweitern, und es funktioniert. Das Problem ist, wenn ich das Kontrollkästchen aktiviert, zeigt es Standard-JCheckbox-Design im Moment und meine Coustom-Checkbox zeigen, geschieht es auch, wenn ich nicht ausgewählt das Kontrollkästchen. here is the question I asked beforeCheckbox Renderer falsch in JTable Spalte
class BooleanRenderer extends TriCheckBox implements TableCellRenderer, UIResource {
private static final long serialVersionUID = 1L;
private final Border noFocusBorder = new EmptyBorder(1, 1, 1, 1);
BooleanRenderer() {
super();
setHorizontalAlignment(JLabel.CENTER);
setBorderPainted(true);
}
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
if (isSelected) {
setForeground(table.getSelectionForeground());
super.setBackground(table.getSelectionBackground());
} else {
setForeground(table.getForeground());
setBackground(table.getBackground());
}
setSelected(value != null && ((Boolean) value).booleanValue());
if (hasFocus) {
setBorder(UIManager.getBorder("Table.focusCellHighlightBorder"));
} else {
setBorder(noFocusBorder);
}
return this;
}
}
public class TriCheckBox extends JCheckBox {
public static ImageIcon icon =new ImageIcon("src/checkbox_off.png");
public static ImageIcon smallIcon = new ImageIcon(icon.getImage().getScaledInstance (12, -1, Image.SCALE_SMOOTH));
public static ImageIcon iconDark =new ImageIcon("src/logo.png");
public static ImageIcon smallIconDark = new ImageIcon(iconDark.getImage().getScaledInstance (12, -1, Image.SCALE_SMOOTH));
public static ImageIcon iconBrown =new ImageIcon("src/checkbox_on.png");
public static ImageIcon smallIconBrown = new ImageIcon(iconBrown.getImage().getScaledInstance (12, -1, Image.SCALE_SMOOTH));
private boolean indeterminate;
@Override
public void paint(Graphics g) {
if (isSelected()) {
indeterminate = false;
}
if(indeterminate){
setIcon(smallIconDark);
}else if(isSelected()){
setIcon(smallIconBrown);
}else{
setIcon(smallIcon);
}
super.paint(g);
}
public boolean isIndetermainate() {
return indeterminate;
}
public void setIndetermainate(boolean indetermainate) {
this.indeterminate = indetermainate;
if (indetermainate) {
setSelected(false);
repaint();
}
}
}
1) Siehe [Erkennung/Korrektur für das Aufhängen der Nähe Klammer eines Codeblocks] (http://meta.stackexchange.com/q/251795/155831) für ein Problem konnte ich nicht mehr gestört werden Festsetzung. 2) Um eine bessere Hilfe zu erhalten, sollten Sie ein [MCVE] oder [Short, Self Contained, Correct Example] (http://www.sscce.org/) veröffentlichen. –
'public static ImageIcon Symbol = new ImageIcon (" src/checkbox_off.png ");' 3) Anwendungsressourcen werden zum Zeitpunkt der Bereitstellung zu eingebetteten Ressourcen, daher ist es ratsam, sofort auf sie zuzugreifen, als ob sie gerade wären. Auf ein [tag: embedded-resource] muss nicht die Datei, sondern die URL zugreifen. Siehe [Info. Seite für eingebettete Ressource] (http://stackoverflow.com/tags/embedded-resource/info) zum Erstellen der URL. 4) Die Verwendung von "statisch" verursacht öfter Probleme, als sie löst. Entferne alle "statischen" Modifikatoren, bevor du MCVE veröffentlichst (oben erwähnt und verlinkt). –