Avatar billede spunkman Nybegynder
20. januar 2004 - 08:37 Der er 11 kommentarer

Makering af celle i tabel

Jeg har en tabel hvor det er muligt at navigere rundt med piletaster, hvor cellerne bliver blå når man står på dem.
Dette er selvfølgelig lavet via getTableCellRendererComponent,
hvor jeg sætter bagrunden blå på den selekterede celle
Men nu har jeg lavet mulighed for comboboxe i tabellen. og istedet for at det kun er liste-delen/editoren der er makeret blå. vil jeg gerne have det er hele cellen.
Det er her min uvidenhed kommer ind i billedet
Jeg har prøvet via paint på min combobox, hvor jeg bruger fill rect det virker fint men så kan jeg ikke se indholdet.

Hvordan gør man, er der en helt anden måde at gøre det på. Eller er det muligt via Graphics2D
Avatar billede _carsten Nybegynder
20. januar 2004 - 08:58 #1
Jeg er ikke sikker på at jeg forstår spørgsmålet, men mig bekendt fylder combobox'en hele cellen ud, så combobox.setBackground() burde jo være løsningen

Eller har jeg misforstået spørgsmålet ???
Avatar billede spunkman Nybegynder
20. januar 2004 - 09:54 #2
setBackground() sætter rigtignok farve på liste delen af comboboxen
men jeg vil have hele cellen farvet, incl. dropdown knappen
man kan få effekten frem ved at man i paint laver en setXorMode(Color) før en drawrect. Det vil give den rigtige effekt, men man kan ikke styrer farverne.
Avatar billede _carsten Nybegynder
20. januar 2004 - 11:08 #3
Hmmm - jeg er stadig lidt lost.

Er det den lille sorte pil, du vil have i samme farve ?

Snakker vi Swing (JComboBox) eller AWT (Choice)?
Avatar billede spunkman Nybegynder
20. januar 2004 - 11:26 #4
Det er en JComboBox
ideen er at hele cellen skal farves, også knappen
så når man bevæger sig rundt i tabellen er hele cellen markeret, på samme måde som når der en et textfelt. Det er sådan at man kan bevæge sig rundt med pile tasterne i tabellen, hvis man trykker på en celle eller skriver i den, går men i edit mode og kan ikke længere flytte sig rundt med pile taster, men kan bruge tab til at navigere rundt, lige som i alm. felter
Derfor skal hele cellen markeres så man tydeligt kan se at man ikke vælge noget ved at trykke pil ned.
Håber det er forståligt !
Avatar billede spunkman Nybegynder
20. januar 2004 - 11:29 #5
spørgsmålet er egentligt hvordan markere jeg et område med en farve. og hvor det stadigt er muligt at se det der står nedenunder.
Avatar billede _carsten Nybegynder
20. januar 2004 - 12:52 #6
Okay - nu er jeg lidt mere med

Jeg faktisk ikke hvordan den bedst løses, men man kunne slå piletasterne fra
i combobox'en og eventuelt flytte til næste række i tabellen

Her nogle ikke testede forslag

        jComboBox.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                if(evt.getKeyCode() == evt.VK_DOWN)
                    evt.consume();
            }
        });


    // I tablemodel, er måske nødvendig
    public boolean isCellEditable(int rowIndex, int columnIndex) {
        // Hvis ComboBox
        return false;
    }
Avatar billede spunkman Nybegynder
20. januar 2004 - 13:10 #7
desværre
det er ikke navigeringen med pile tasterne der er et problem, det er det styr på
det er farven. Jeg vil have farvet cellen blå, hele cellen
denne paint metoder viser hvordan det skal se ud. men man kan ikke se indholdet
med setXor metoden kan man se indholdet men ikke styre farven. så jeg mangler en anden måde at gøre det på.

public void paint(Graphics g) {
  super.paint(g);
  PTable table = (PTable)owner;
  if (table.getSelectedColumn() == table.columnAtPoint(getLocation()) && table.getSelectedRow() == table.rowAtPoint(getLocation())) {
    g.setColor(Color.blue);
    Rectangle rec = table.getCellRect(table.getSelectedRow(),table.getSelectedColumn(),false);
  //    g.setXORMode(Color.red);
    g.fillRect(0,0,rec.width-1,rec.height-1);
  }
}
Avatar billede _carsten Nybegynder
20. januar 2004 - 13:25 #8
Jeg spørg nok dumt endnu engang, hvor overrider du paint ??,  i JComboBox ??


Nedenstående styrer cellefarven

        if(isSelected){ // Hvis række er valgt
            if (hasFocus) { // Hvis celle har focus
                setBackground( Color.blue);            }
            else {
                setBackground( Color.white);
            }
        }
        else{
            setBackground( Color.green);
        }
Avatar billede _carsten Nybegynder
20. januar 2004 - 13:26 #9
Og den skal selvfølgelig ind i din TableCellRenderer
Avatar billede spunkman Nybegynder
20. januar 2004 - 13:40 #10
Min paint er i min combobox som extender JCombobox

det med cellefarverne virker vel ikke når der er en anden editor i cellen
Hver kolonne har sin egen editor som i tableRendereren får sat sin værdi farve mm.

så en setBackground har ikke nogen effekt som jeg ser det.
Avatar billede spunkman Nybegynder
20. januar 2004 - 13:54 #11
jeg tror jeg kan styre det lidt bedre med
((Graphics2D)g).setComposite(AlphaComposite.getInstance(aphaComposite.SRC_OVER,0.5f));
i min comboBox paint
men har ikke samme effekt swap effekt som setbackground(blue) og set forground(white)
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