Avatar billede thinge Nybegynder
11. december 2005 - 14:04 Der er 16 kommentarer og
1 løsning

JTable Column alignment - Hvad gør jeg forkert

Kode:
package Client.GUI.BasicData.Cards.CellRenderer;
import Objects.CardType;
import java.awt.Component;
import java.util.Vector;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.TableCellRenderer;

public class TypeCellRender extends DefaultTableCellRenderer implements TableCellRenderer {

  public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int rowIndex, int vColIndex) {
    Vector types = (Vector)value;
    String cardTypes = "";
    setHorizontalAlignment(LEFT);
    setVerticalAlignment(TOP);
    for(int q = 0; q < types.size(); q++){
      CardType cardType = (CardType)types.elementAt(q);
      cardTypes += " "+cardType.getCardTypeName();       
    }
    JLabel label = new JLabel(cardTypes.trim());
    return label;
  }
}

Men teksten står stadig i midten
Hvad skal jeg gøre for at teksten til at stå i toppen af kollonnen

thinge
Avatar billede mikkelbm Nybegynder
11. december 2005 - 15:43 #1
Jeg forstår ikke hvorfor du implementerer TableCellRenderer, når du extender DefaultTableCellRenderer. DefaultTableCellRenderer er en klasse og implementerer også TableCellRenderer. Prøv at fjerne den implements.
Avatar billede mikkelbm Nybegynder
11. december 2005 - 15:44 #2
Og fejlen er nok:

JLabel label = new JLabel(cardTypes.trim());
return label;

prøv i stedet bare:

return (Component)this;
Avatar billede _carsten Nybegynder
11. december 2005 - 16:27 #3
Sådan

  public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int rowIndex, int vColIndex) {
    Vector types = (Vector)value;
    String cardTypes = "";
    setHorizontalAlignment(LEFT);
    setVerticalAlignment(TOP);
    for(int q = 0; q < types.size(); q++){
      CardType cardType = (CardType)types.elementAt(q);
      cardTypes += " "+cardType.getCardTypeName();       
    }
    setValue(cardTypes.trim());
    return this;
  }
}
Avatar billede thinge Nybegynder
12. december 2005 - 08:17 #4
carsten dit svar var korrekt. Smid lige et svar!
Avatar billede _carsten Nybegynder
12. december 2005 - 09:48 #5
Kommer her
Avatar billede mikkelbm Nybegynder
12. december 2005 - 09:56 #6
Lige en lille note. Mit svar var vel ikke forkert :) ?

Jeg glemte dog setText eller setValue - alt efter hvad man lyster, men selve forslaget var vel nok til at du kunne komme videre.
Avatar billede thinge Nybegynder
12. december 2005 - 10:04 #7
Ikke helt rigtig:
Mit næste problem er nemlig, at jeg prøver dit forslag, dog med en comboBox.
Og her kommer der bare en String frem hvor der står "Java.Swing..." Altså ingen comboBox. Men hvis jeg istedet returnere panel, så kommer boxen frem. Men så kan jeg ikke aligne boxen.
Så hvis du har et svar på denne, så opretter jeg gerne et ? hvor du bare kan svare, og få point.

public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int rowIndex, int vColIndex) {
    Vector series = (Vector)value;
    if(series.size() > 1){
      JPanel panel = new JPanel();
      panel.setBackground(Color.WHITE);
      JComboBox test = new JComboBox(series);
      test.setPreferredSize(new Dimension(70,15));
      panel.add(test);
      component = (JPanel)panel;
      setValue(panel);
      return (Component)this;
    }
    Serie serie = (Serie)series.elementAt(0);
    setHorizontalAlignment(LEFT);
    setVerticalAlignment(TOP);
    setValue(serie.getSerieName());
    return this;
  }
Avatar billede mikkelbm Nybegynder
12. december 2005 - 10:14 #8
Har du taget et kig på suns hjemmeside?

http://java.sun.com/docs/books/tutorial/uiswing/components/table.html

Der har de faktisk et eksempel på hvordan du viser en combobox i en table.

Kig efter: "Using a Combo Box as an Editor "
Avatar billede thinge Nybegynder
12. december 2005 - 10:18 #10
Ja. Problemet er bare at de laver boxen statisk og ikke dynamisk. Så den kan jeg ikke bruge.
Avatar billede mikkelbm Nybegynder
12. december 2005 - 10:21 #11
Så du har brug for en combobox der er/kan være forskellig for hver enkelt række?
Avatar billede mikkelbm Nybegynder
12. december 2005 - 10:22 #12
For hvis det er fordi du "bare" vil fylde flere data i din combobox, holder du bare på instansen af din combobox og fylder flere data i den - eller fjerner fra den.
Avatar billede mikkelbm Nybegynder
12. december 2005 - 10:23 #13
Og mine sidste 2 kommentarer skal ses som to forskellige scenarier :) Jeg ved ike lige hvor tydeligt det fremgår.
Avatar billede thinge Nybegynder
12. december 2005 - 10:46 #14
Ja combobox er forskellig for hver række.

Du mener sådan, ikk'

public class SeriesCellRender extends DefaultTableCellRenderer implements TableCellEditor,TableCellRenderer {
  private Object component;
  private JComboBox comboBox;
 
  public SeriesCellRender(JComboBox comboBox){
    this.comboBox = comboBox;
  }
 
  public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int rowIndex, int vColIndex) {
    Vector series = (Vector)value;
    if(series.size() > 1){
      comboBox.removeAllItems();
      JPanel panel = new JPanel();
      panel.setBackground(Color.WHITE);
      for(int i = 0; i < series.size(); i++){
        comboBox.addItem((Serie)series.elementAt(i));
      }
      comboBox.setPreferredSize(new Dimension(70,15));
      return (Component)this;
    }
    Serie serie = (Serie)series.elementAt(0);
    setHorizontalAlignment(LEFT);
    setVerticalAlignment(TOP);
    setValue(serie.getSerieName());
    return this;
  }
}
Avatar billede mikkelbm Nybegynder
12. december 2005 - 10:54 #15
Joh... Mht alignment skal du sætte layout og alignment på det panel du tilføjer din combobox til.

Men i og med at du ikke bruger rowIndex nogen steder, så kan jeg ikke se hvordan du vil få en combobox der er forskellig for hver række.

Så vidt jeg ved, så sætter man en cellrenderer for en hel kolonne ad gangen. Og det vil sige at du bliver nødt til at finde din combobox/indhold ud fra rowIndex, og kan derfor ikke smide den med i constructoren.
Avatar billede mikkelbm Nybegynder
12. december 2005 - 11:01 #16
Og i og med at comboboxen er forskellig for hver række, kan min kommentar: 12/12-2005 10:22:20 ikke bruges.
Avatar billede thinge Nybegynder
13. december 2005 - 08:37 #17
efter utallige forsøg, så virker den
public Component getTableCellEditorComponent(JTable table, Object value,boolean boo, int i, int u){
    Vector series = (Vector)value;
    if(series.size() > 1){
      panel = new JPanel();
      panel.setLayout(new BorderLayout());
      panel.setBackground(Color.WHITE);
      JComboBox comboBox = new JComboBox(series);
      comboBox.setPreferredSize(new Dimension(70,15));
      panel.add( comboBox,  BorderLayout.NORTH );
      return panel;
    }
    Serie serie = (Serie)series.elementAt(0);
    setHorizontalAlignment(LEFT);
    setVerticalAlignment(TOP);
    setValue(serie.getSerieName());
    return this;
  }
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
Kategori
Kurser inden for grundlæggende programmering

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