How do I write superscript word for checkbox text in java?

南楼画角 提交于 2020-01-09 11:48:54

问题


I made few checkboxes using swing in Java. I want to write a superscript text for the checkboxes but I'm not sure how.

The code currently looks like this.

JCheckBox hCheckBox = new JCheckBox("[M + H]+");

I want to have "+" sign inside the JCheckBox parameter superscripted. What's an easy way to do this?

Thank you in advance.


回答1:


Java buttons support html in their text. You need to format the string a little differently though. Try this:

JCheckBox hCheckBox = new JCheckBox("<html>[M + H]<sup>+</sup></html>"); 



回答2:


      package infonode;

        /**
         *
     * @author Deepak
     */
    import java.awt.*;
    import java.awt.event.*;

    import javax.swing.*;
    import javax.swing.border.*;
    import javax.swing.table.*;
    import javax.swing.text.*;

    public class CoolTable extends AbstractTableModel{


    public static void main(String[] arg){
        JFrame f = new JFrame("Cool Table");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JTable t = new JTable(new CoolTable());
        t.setDefaultRenderer(Object.class, new StyledCellRenderer());
        t.setDefaultEditor(Object.class, new StyledCellEditor());
        t.setRowHeight(50);

        System.out.println(t.isCellEditable(0, 0));

        f.add(new JScrollPane(t));
        f.pack();
        f.setVisible(true);
    }

    private Object[] data;

    /** Creates a new instance of CoolTable */
    public CoolTable() {
        final String[] dataSrc = "This is a test".split(" ");
        data = new Object[dataSrc.length]; 
        System.arraycopy(dataSrc, 0, data, 0, data.length);
    }

    public int getRowCount() { return data.length; }
    public int getColumnCount() { return 1; }
    public boolean isCellEditable(int r, int c) { return true; }

    public Object getValueAt(int r, int c){
        if(data[r] instanceof String) {
            try{
                DefaultStyledDocument doc = new DefaultStyledDocument();
                doc.insertString(0, data[r].toString(), null);
                data[r] = doc;
            } catch(BadLocationException x) {
                x.printStackTrace(System.err);
                System.exit(1);
            }
        }

        return data[r];
    }

    public void setValueAt(int r, int c, Object val){
        data[r] = val instanceof DefaultStyledDocument ? val : val.toString();
    }

    public static class StyledCellRenderer implements TableCellRenderer {
        private static Border etchedBorder = BorderFactory.createEtchedBorder();

        private JTextComponent styledRenderer = new JTextPane();

        public Component getTableCellRendererComponent(JTable table, Object value,
                                            boolean isSelected, boolean hasFocus, 
                                            int row, int column) {

            styledRenderer.setDocument((Document)value);
            styledRenderer.setBackground(isSelected ? Color.LIGHT_GRAY : Color.WHITE);
            styledRenderer.setBorder(hasFocus ? etchedBorder : null);
            return styledRenderer;
        }
    }

    public static class StyledCellEditor extends DefaultCellEditor {
        private JTextPane styledEditor = new JTextPane();

        public StyledCellEditor() {
            super(new JTextField());
            editorComponent = new JScrollPane(styledEditor);

            installActions();

            delegate = new DefaultCellEditor.EditorDelegate() {
                public void setValue(Object val) {
                    styledEditor.setDocument((Document)val);
                }

                public Object getCellEditorValue() { return styledEditor.getDocument(); }
            };

            styledEditor.addFocusListener(new FocusAdapter(){
                public void focusLoast(FocusEvent e){ delegate.stopCellEditing(); }
            });
        }

        private void installActions() {
            styledEditor.getInputMap().put(
                KeyStroke.getKeyStroke(KeyEvent.VK_UP, InputEvent.ALT_MASK),
                "superscript"
            );
            styledEditor.getInputMap().put(
                KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, InputEvent.ALT_MASK),
                "subscript"
            );
            styledEditor.getInputMap().put(
                KeyStroke.getKeyStroke(KeyEvent.VK_B, InputEvent.CTRL_MASK),
                "bold"
            );

            styledEditor.getActionMap().put("superscript", new SuperscriptAction(true));
            styledEditor.getActionMap().put("subscript", new SuperscriptAction(false));
            styledEditor.getActionMap().put("bold", new StyledEditorKit.BoldAction());
        }
    }

    private static class SuperscriptAction extends AbstractAction {
        private MutableAttributeSet superscript = new SimpleAttributeSet();

        public SuperscriptAction() {
            this(true);
        }

        public SuperscriptAction(boolean isSuperscript) {
            StyleConstants.setSuperscript(superscript, isSuperscript);
        }

        public void actionPerformed(ActionEvent e) {
            final JTextPane styledEditor = (JTextPane)e.getSource();

            styledEditor.getStyledDocument().setCharacterAttributes(
                styledEditor.getSelectionStart(), 
                styledEditor.getSelectionEnd() - styledEditor.getSelectionStart(),
                superscript,
                false
            );
        }
    }
}

I hope it will help you :)



来源:https://stackoverflow.com/questions/3925917/how-do-i-write-superscript-word-for-checkbox-text-in-java

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!