Avatar billede kimlarsen1978 Nybegynder
15. december 2002 - 19:55 Der er 15 kommentarer og
1 løsning

Kolonne/række farve i JTabel

Hej
Kan man give sine kolonner og rækker farver i en JTabel?
Fx. lave kolonne0 og række0 gul?
Avatar billede riversen Nybegynder
15. december 2002 - 20:01 #1
Avatar billede riversen Nybegynder
15. december 2002 - 20:02 #2
Avatar billede kimlarsen1978 Nybegynder
15. december 2002 - 20:29 #3
Det fandt jeg så et interfase:
-------------
public interface ColoredCell {
 
  public Color getForeground(int row, int column);
  public void setForeground(Color color, int row, int column);
  public void setForeground(Color color, int[] rows, int[] columns);

  public Color getBackground(int row, int column);
  public void setBackground(Color color, int row, int column);
  public void setBackground(Color color, int[] rows, int[] columns);


}
----------
men jeg kan ikke inplementere det fordi min TabelModel tager et argument med - er der ikke noget simplere
Avatar billede riversen Nybegynder
15. december 2002 - 20:38 #4
ellers kig på DefaultTableCellRenderer
Avatar billede kimlarsen1978 Nybegynder
15. december 2002 - 20:38 #5
Og det er?
Avatar billede riversen Nybegynder
15. december 2002 - 20:54 #6
prøv at kigge i mit nederste link samt api'en
Avatar billede viht Nybegynder
16. december 2002 - 01:03 #7
Jeg har svaret på det tidligere:
http://www.eksperten.dk/spm/289293
Avatar billede kimlarsen1978 Nybegynder
21. december 2002 - 14:50 #8
Lukker - fadt desvære ikke en løsning :-(
Avatar billede riversen Nybegynder
21. december 2002 - 15:24 #9
tja, løsning er ovenfor, så hvis du ikke kunne forstå det skulle du jo spørge videre
Avatar billede viht Nybegynder
21. december 2002 - 18:36 #10
Ja, det forstår jeg da ikke du siger. Den jeg poster virker 100% med Color's direkte i cellerne?
Det er da for dårligt hvis du bare suger løsninger uden at give point.
Avatar billede riversen Nybegynder
21. december 2002 - 18:41 #11
viht: jeg var tæt på en anmeldelse...så jeg støtter dig hvis det er
Avatar billede kimlarsen1978 Nybegynder
21. december 2002 - 18:51 #12
Hey...
Jeg suger ikke points ud! Jeg har været igennem mine ubesvarede spg. og samlet op på dem. Hvad dette sgp. angår fik jeg et Interface som jeg ikke kunne inplementerer. Jeg arbejdede i timevis med det, og fandt ikke en brugbar løsning, om det er mine evner eller det script du postede skal jeg lade være usagt, men at beskylde folk for at suge points ud er for lavt. Jeg giver point for løsninger eller indsats derfor. At liste en række links er for mig at se ikke en "tidskrævende" indsats, og da jeg heller ikke fandt en løsning i links'ne ser jeg ikke grund til i dette tilfælde at give points - sorry. Hvorfor "suge" 30 points ud?
Avatar billede riversen Nybegynder
21. december 2002 - 19:00 #13
du skal huske at vi egentlig også sidder og bruger tid på det her. At du så ikke kan finde ud af det er ok, men at du ikke gider fortsætte og bare lukke, så vi faktisk har spildt vores tid kan være temmelig irriterende.
Avatar billede kimlarsen1978 Nybegynder
21. december 2002 - 19:11 #14
Okay... Sorry - jeg vil tage det med fremover
Avatar billede riversen Nybegynder
21. december 2002 - 19:19 #15
ok... :-)
Avatar billede viht Nybegynder
21. december 2002 - 19:43 #16
Dette virker, så kan du se om du kan få dig sat ind i det :)

import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.table.*;

public class TableCellRenderTest {
  public static void main(String[] args) { 
     
      JFrame frame = new TableCellRenderFrame();
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
      /*
      *Sætter JFrame i midten af skærmen
      */   
      int width = Toolkit.getDefaultToolkit().getScreenSize().width;
      int height= Toolkit.getDefaultToolkit().getScreenSize().height;
      frame.setLocation((width-frame.getSize().width)/2,(height-frame.getSize().height) / 2);
     
      frame.show();
  }
}

class TableCellRenderFrame extends JFrame { 
 
  public TableCellRenderFrame() { 
      setTitle("TableEditTest");
      setSize(600, 250);

      TableModel model = new MyTableModel();
      JTable table = new JTable(model);

      table.setDefaultRenderer(Color.class,
        new ColorTableCellRenderer());
      table.setDefaultEditor(Color.class,
        new ColorTableCellEditor());

      JComboBox combo = new JComboBox();
      for (int i = 0; i <= 42; i++)
        combo.addItem(new Integer(i));
       
      TableColumnModel columnModel = table.getColumnModel();
      TableColumn nameColumn = columnModel.getColumn(MyTableModel.COMBO_COLUMN);
      nameColumn.setCellEditor(new DefaultCellEditor(combo));

      table.setRowHeight(50);
      getContentPane().add(new JScrollPane(table), BorderLayout.CENTER);
  }
}

class MyTableModel extends AbstractTableModel { 
 
  public String getColumnName(int c) { 
      return columnNames[c];
  }

  public Class getColumnClass(int c) { 
      return cells[0][c].getClass();
  }

  public int getColumnCount() { 
      return cells[0].length;
  }

  public int getRowCount() { 
      return cells.length;
  }

  public Object getValueAt(int r, int c) { 
      return cells[r][c];
  }

  public void setValueAt(Object obj, int r, int c) { 
      cells[r][c] = obj;
  }

  public boolean isCellEditable(int r, int c) { 
      /*
      * Kun disse felter vil jeg lade brugeren editere:
      */
      return c == NAME_COLUMN || c == COMBO_COLUMN || c == CHECKBOX_COLUMN || c == COLOR_COLUMN;
  }

  public static final int NAME_COLUMN = 0;
  public static final int COMBO_COLUMN = 2;
  public static final int CHECKBOX_COLUMN = 3;
  public static final int COLOR_COLUMN = 4;

    /*
    * JTable data:
    */
  private Object[][] cells = {
      { "Howdy", new Double(1337),  new Integer(0), Boolean.FALSE, Color.yellow },
      { "Dav", new Double(4711), new Integer(0), Boolean.FALSE, Color.yellow },
      { "Jow jow", new Double(42), new Integer(1), Boolean.FALSE, Color.blue }
  };

  private String[] columnNames = { "Navn", "Nummer", "ComboBox", "Column4", "Column5" };
}

class ColorTableCellRenderer implements TableCellRenderer {
  public Component getTableCellRendererComponent(JTable table,
      Object value, boolean isSelected, boolean hasFocus,
      int row, int column) { 
      panel.setBackground((Color)value);
      return panel;
  }

  private JPanel panel = new JPanel();
}

class ColorTableCellEditor extends AbstractCellEditor implements TableCellEditor {
   
  private Color color;
  private JColorChooser colorChooser;
  private JDialog colorDialog;
  private JPanel panel;
 
  ColorTableCellEditor() { 
       
        /*
        * Definerer min colorchooser
        */
      panel = new JPanel();
      colorChooser = new JColorChooser();
      /*
      * Lader JColorChooser lave dialogboksen og definerer ActionListeners
      */
      colorDialog = JColorChooser.createDialog(null, "Farve", false, colorChooser,
      new ActionListener() { 
        public void actionPerformed(ActionEvent event) { 
            stopCellEditing();
        }
      },
      new ActionListener() { 
        public void actionPerformed(ActionEvent event) { 
            cancelCellEditing();
        }
      });
     
      colorDialog.addWindowListener(
      new WindowAdapter() {
        public void windowClosing(WindowEvent event) {
            cancelCellEditing();
        }
      });
  }

  public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { 
      colorChooser.setColor((Color)value);
      return panel;
  }

  public boolean shouldSelectCell(EventObject anEvent) { 

      colorDialog.setVisible(true);

      return true;
  }

  public void cancelCellEditing() { 
      colorDialog.setVisible(false);
      super.cancelCellEditing();
  }

  public boolean stopCellEditing() { 
      colorDialog.setVisible(false);
      super.stopCellEditing();

      return true;
  }

  public Object getCellEditorValue() { 
      return colorChooser.getColor();
  }
}
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