Avatar billede tblaster Nybegynder
17. oktober 2014 - 15:14 Der er 2 kommentarer og
1 løsning

Hjælp til at centrer tekst i JTable hvis DefaultTableCellRenderer() ikke bruges

Jeg kan fint centrer tekst i min tabel hvis jeg benytter følgende:

defaultRendererCenter = new DefaultTableCellRenderer();
defaultRendererCenter.setHorizontalAlignment(SwingConstants.CENTER);
TableColumn newColumn = new TableColumn(modelIndex);
newColumn.setCellRenderer(defaultRendererCenter);

Men hvis jeg benytter følgende:

myRenderer = new FormattedCellRenderer(Format);
TableColumn newColumn = new TableColumn(modelIndex);
newColumn.setCellRenderer(myRenderer);

Så virker det ikke. Jeg har forsøgt med både:
JLabel newLabel = new JLabel(text, JLabel.CENTER);

Og
JLabel newLabel = new JLabel(text);
newLabel.setHorizontalAlignment(JLabel.CENTER);
newLabel.setHorizontalTextPosition(JLabel.CENTER);

Men min tekst bliver ved med at stå til venstre - også selvom jeg benytter SwingConstants.CENTER. Kan I hjæpe?

Her er min FormattedCellRenderer.java
--------------------------------------------------------------------
import java.awt.Color;
import java.awt.Component;
import java.awt.Font;
import java.text.NumberFormat;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTable;
import javax.swing.OverlayLayout;
import javax.swing.SwingConstants;
import javax.swing.UIManager;
import javax.swing.border.Border;
import javax.swing.table.TableCellRenderer;

class FormattedCellRenderer implements TableCellRenderer {
    private Font font;
    private NumberFormat format;

    FormattedCellRenderer(NumberFormat format) {
        this.format = format;
    }
   
    public Component getTableCellRendererComponent(JTable table, Object value,
            boolean isSelected, boolean hasFocus, int row, int column) {

        JPanel newPanel = new JPanel();
        newPanel.setLayout(new OverlayLayout(newPanel));
        Color bgColor;

        if (value != null) {

            String text;

            if (value instanceof Number)
                text = format.format((Number) value);
            else
                text = value.toString();
           
            JLabel newLabel = new JLabel(text, JLabel.CENTER);

            newPanel.add(newLabel);

        }
        return newPanel;

    }
}



Hvis jeg laver et System.out.println(newLabel) lige før newPanel.add(newLabel) får jeg følgende output:
javax.swing.JLabel[,0,0,0x0,invalid,alignmentX=0.0,alignmentY=0.0,border=,flags=8388608,
maximumSize=,minimumSize=,preferredSize=,defaultIcon=,disabledIcon=,horizontalAlignm
ent=CENTER,horizontalTextPosition=CENTER,iconTextGap=4,labelFor=,text=6.7,verticalAli
gnment=CENTER,verticalTextPosition=CENTER]
Avatar billede conz Juniormester
17. oktober 2014 - 18:02 #1
JLabel newLabel = new JLabel(text, SwingConstants.CENTER);
Avatar billede tblaster Nybegynder
20. oktober 2014 - 08:16 #2
Det virker heller ikke. Det virker til at der bruges en default værdi = left.
Avatar billede tblaster Nybegynder
20. oktober 2014 - 09:06 #3
Jeg fandt fejlen, hvis jeg sletter følgende linje virker det fint:
newPanel.setLayout(new OverlayLayout(newPanel));
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester