Announcement

Collapse
No announcement yet.

JTable: Elemente farbig, wenn Bedingung erfüllt

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • JTable: Elemente farbig, wenn Bedingung erfüllt

    Hallo Zusammen!

    Ich habe folgendes Problem:
    Bei einer <b>javax.swing.JTable</b> habe ich vier Spalten und y Zeilen (alles Textfelder).
    Wenn in einer Zeile zwei oder mehr Einträge gleich sind, dann soll bei all diesen Splaten der Hintergrund rot werden.
    Hat hier jemand eine Idee, wie man sowas macht?

    Die Daten der Spalte liegen in einem String[][] -Array.

    -----------------
    | 1 | 2 | 3 | 4 |
    -----------------
    | x | y | z | w | -> Hintergrund weiß
    -----------------
    | H | d | x | H | -> Spaltenelement 1 und 4 -> roter Hintergrund
    -----------------

  • #2
    Hallo,

    versuchs mal so: In einer Methode im Applet hol Dir das Column Model:

    javax.swing.table.TableColumnModel myTableModel = getScrollPaneTable1().getColumnModel();

    Dann baue Dir Deinen eigenen Cell Renderer:

    javax.swing.table.DefaultTableCellRenderer pinkBackground = new javax.swing.table.DefaultTableCellRenderer();
    pinkBackground.setBackground(Color.pink);

    Der Hintergrund der gewünschten Spalte wir pink respektive weiss oder so...

    myTableModel.getColumn(0).setCellRenderer(pinkBack ground);

    Klaus
    [email protected]

    Comment


    • #3
      Hallo Klaus! <P>
      Die Idee mit dem CellRenderer hatte ich auch schon.<p>
      Aber wie erfahre ich im cellrenderer, in welche Spalte/ Zeile ich bin und wie frage ich die anderen Zeilenwerte ab? <p>
      Das Problem ist: <p>
      - eine Zelle soll nur rot werden, wenn deren Inhalt in der gleichen Zeile in einer anderen Spalte schon mal auftrat, sonst soll die Zelle weiß beleiben. <P>
      Dei Farbe kann ich wie folgt anpassen: <p>
      TableColumn c1 = tableView.getColumn("-1-"); <p>
      TableColumn c2 = tableView.getColumn("-2-"); <p>
      TableColumn c3 = tableView.getColumn("-3-"); <p>
      TableColumn c4 = tableView.getColumn("-4-"); <P>
      <p>

      DefaultTableCellRenderer cR = <p>
      new DefaultTableCellRenderer() { <p>
      public void setValue(Object value) { <p>
      String cellValue = (value instanceof String) <p>
      ? ((String)value) : ""; <p>
      <p>
      if (cellValue.equals("H")) { <p>
      setBackground(Color.red); <P>
      } else { <p>
      setBackground(Color.white); <p>
      } <p>
      <p>
      setText((value == null) ? "" : value.toString());<p>
      } <p>
      }; <p>
      c1.setCellRenderer(cR); <p>
      c2.setCellRenderer(cR); <p>
      c3.setCellRenderer(cR); <p>
      c4.setCellRenderer(cR); <p>
      <p>
      In diesem Beispiel wird der Hintergrund rot, wenn der Wert 'H' eingegeben wird, aber wie erreiche ich es, dass der Wert nur rot wird, wenn 'H' in der gleichen Zeile nochmal vorkommt? <p>
      <p>
      Gruss Michae

      Comment


      • #4
        Hallo Michael,

        das Table Model bietet Dir doch eine Methode setValueAt(Object,int,int). In dieser methode könntest Du doch den Renderer erst setzen wenn gewisse bedingungen erfüllt sind ("H" in mehrern Spalten). Sobald eine Zelle editiert und geschlossen wurde, wird sie vom TableModel aufgerufen.

        Versuchs mal ..

        Comment


        • #5
          Hallo Klaus! <br>
          Deine Idee war echt super! <br>
          Jetzt habe ich die Lösung für meine Problem gefunden. <br>
          Ich maile Dir direkt meinen Ergebnis. <br>
          Gruß<br>
          Michael ([email protected]) <br&gt

          Comment


          • #6
            hallo,

            ich habe das selbe problem. könntest du mir ein beispiel wie du das gemacht hast zusenden! dank

            Comment


            • #7
              Dazu brauche ich aber Deine email-Adresse<br>
              Gruss Michael <br>
              [email protected]

              Comment


              • #8
                Hallo,

                gute Beispiele zu Swing JTable findet ihr unter der URL: http://manning.spindoczine.com/sbe/ nach unten scrollen und das Kapitel 18 downloaden/durchlesen. Die Sourcen zu den Beispielen kann man auch downloaden.

                Gruß VKy

                Comment


                • #9
                  Mir könntest Du auch mal bitte dein Besipiel schicken!

                  Hier meine Mail Adresse: [email protected]

                  Ciao
                  Marcel
                  www.downhill24.d

                  Comment


                  • #10
                    Recht gute Beispiele für JTables etc. sind auch unter :
                    http://www2.gol.com/users/tame/swing/examples/JTableExamples3.html
                    zu finden

                    Comment

                    Working...
                    X