Frage

Ich möchte meine jCheckboxen in einem jtable größer machen (für Touchscreen), aber es ändert die Größe nicht.

Ich habe es versucht mit

  • setprefferedSize
  • SetSize

Was soll ich machen?..

War es hilfreich?

Lösung

Ich nehme an, Sie meinen, Sie möchten ein größeres Kontrollkästchen. Wenn ja, müssen Sie Bilder erstellen, um die nicht ausgewählten und ausgewählten Symbole des Kontrollkästchens darzustellen. Anschließend können Sie mit diesen Symbolen einen Renderer und einen Editor erstellen. Schließlich müssten Sie die Höhe jeder Reihe in der Tabelle erhöhen. Der Code könnte ungefähr aussehen wie:

Icon normal = new ImageIcon(...);
Icon selected = new ImageIcon(...);
JTable table = new JTable(...);
table.setRowHeight(...);

TableCellRenderer renderer = table.getDefaultRenderer(Boolean.class);
JCheckBox checkBoxRenderer = (JCheckBox)renderer;
checkBoxRenderer.setIcon( normal );
checkBoxRenderer.setSelectedIcon( selected );

DefaultCellEditor editor = (DefaultCellEditor)table.getDefaultEditor(Boolean.class);
JCheckBox checkBoxEditor = (JCheckBox)editor.getComponent();
checkBoxEditor.setIcon( normal );
checkBoxEditor.setSelectedIcon( selected );

Andere Tipps

Wichtiger Anmerkung: Dies wurde nur mit dem Standard -"-See -Feel" getestet. Ich garantiere nicht, dass dies für ein anderes Erscheinungsbild funktioniert. Ich bin mir auch nicht ganz sicher, wie es funktioniert, weil es zugegebenermaßen ein bisschen ein Hack ist.

Ich konnte dies auf etwas andere Weise lösen.

Ich wollte die vorhandenen Bilder verwenden und einfach eine Skala anwenden. Ich skaliere bereits die Schrift meiner Anwendung mit den UI -Standardeinstellungen und habe daher eine ziemlich große Schriftart. Ich fragte mich, ob ich das nutzen und die Kontrollkästchen entsprechend skalieren könnte.

Nachdem ich das Internet gesucht und ein paar Dinge ausprobiert habe, habe ich diese Methode entwickelt:

public static void scaleCheckBoxIcon(JCheckBox checkbox){
    boolean previousState = checkbox.isSelected();
    checkbox.setSelected(false);
    FontMetrics boxFontMetrics =  checkbox.getFontMetrics(checkbox.getFont());
    Icon boxIcon = UIManager.getIcon("CheckBox.icon");
    BufferedImage boxImage = new BufferedImage(
        boxIcon.getIconWidth(), boxIcon.getIconHeight(), BufferedImage.TYPE_INT_ARGB
    );
    Graphics graphics = boxImage.createGraphics();
    try{
        boxIcon.paintIcon(checkbox, graphics, 0, 0);
    }finally{
        graphics.dispose();
    }
    ImageIcon newBoxImage = new ImageIcon(boxImage);
    Image finalBoxImage = newBoxImage.getImage().getScaledInstance(
        boxFontMetrics.getHeight(), boxFontMetrics.getHeight(), Image.SCALE_SMOOTH
    );
    checkbox.setIcon(new ImageIcon(finalBoxImage));

    checkbox.setSelected(true);
    Icon checkedBoxIcon = UIManager.getIcon("CheckBox.icon");
    BufferedImage checkedBoxImage = new BufferedImage(
        checkedBoxIcon.getIconWidth(),  checkedBoxIcon.getIconHeight(), BufferedImage.TYPE_INT_ARGB
    );
    Graphics checkedGraphics = checkedBoxImage.createGraphics();
    try{
        checkedBoxIcon.paintIcon(checkbox, checkedGraphics, 0, 0);
    }finally{
        checkedGraphics.dispose();
    }
    ImageIcon newCheckedBoxImage = new ImageIcon(checkedBoxImage);
    Image finalCheckedBoxImage = newCheckedBoxImage.getImage().getScaledInstance(
        boxFontMetrics.getHeight(), boxFontMetrics.getHeight(), Image.SCALE_SMOOTH
    );
    checkbox.setSelectedIcon(new ImageIcon(finalCheckedBoxImage));
    checkbox.setSelected(false);
    checkbox.setSelected(previousState);
}

Was es tut, ist die Größe der Schriftart aus den Schriftkennzahlen der Kontrollkiste. Dann leitet es ein neues Symbol ab, das auf dem Symbol im "Look and Feel" basiert.

Eine seltsame Sache, die ich nicht erklären kann, ist, wie das Symbol für das Kontrollkästchen in seinem "nicht ausgewählten" oder standardmäßigen Status das Symbol "Ausgewählt" ändert, wenn ich auf die gleiche Eigenschaft zugegriffen habe, um jeden einzelnen zu erhalten.

Ich speichere zunächst den Zustand der Kontrolle, damit ich ihn am Ende wiederherstellen kann. Dies geschieht, weil der Zustand, wenn Sie das Symbol zum ersten Mal vom Uimanager anfordern ' Symbol.

Ich bin mir nicht ganz sicher, wie der Uimanager funktioniert oder warum sich das Kontrollkästchen -Symbol ändert, wenn wir dieselbe Eigenschaft aufrufen, indem wir den Wert eines einzelnen Kontrollkästchen "ausgewählt" festlegen. Dies ist jedoch erforderlich, um beide erforderlichen Symbole zu erhalten.

Wenn Sie die Größe auf der Schriftart nicht stationieren möchten, können Sie einfach die Höhe und Breite als Parameter bestehen und anstelle der Höhe der Schrift beim Einstellen der gepufferten Bildgröße verwenden.

Ich könnte erwähnen, dass dieselbe Methodik mit Radiobuttons funktioniert

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top