Dreiecke in bestimmte Zellen einer JTable

Shelfelf

Mitglied
Hi,

ich würde gerne schwarze Dreiecke in bestimmte Zellen meiner Tabelle zeichnen. Leider fehlt mir hier völlig der Ansatz... Gibt es eine Möglichkeit ein Dreieck(◥ ◤ ◣ ◢) in eine Zelle einzufügen, sodass die Zelle im Prinzip diagonal geteilt wird, wobei eine Seite schwarz und eine weiß erscheint?

Gruß Shelfelf
 

Shelfelf

Mitglied
Den Cell Renderer verwende ich bereits um beispielsweise Zellen schwarz einzufärben. Das Problem liegt bei den Dreiecken. Gibt es eine Methode, die Zellen diagonal zu teilen, oder nur die oben beschriebenen Dreiecke zu färben?
 

Shelfelf

Mitglied
Nach langem Ausprobieren mit der paint Methode bin ich leider nicht in der Lage ein Dreieck zu zeichnen... Könnte mir bitte jemand auf die Sprünge helfen? Bin leider nicht so fit in Java. Hier ist mein Renderer bisher:
Java:
myTable.setDefaultRenderer(Object.class, new DefaultTableCellRenderer() {
       [USER=48687]@Override[/USER]
       public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,
           boolean hasFocus, int row, int column) {
        
         Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);

         if ((myTable.getValueAt(row, column)) <= 5) {
           c.setBackground(Color.BLACK);
         } else if (myTable.getValueAt(row, column) == 6) {
           c.setBackground(Color.WHITE);
         }
         return c;
       }
     });
 

Blender3D

Top Contributor
Du musst die Methode paint überschreiben!!
Code:
import java.awt.Graphics;
import javax.swing.table.DefaultTableCellRenderer;

public class MyCellRenderer extends DefaultTableCellRenderer {
    @Override
    public void paint(Graphics g) {
        super.paint(g);
        // zeichne dreieck oder mach sonst etwas
    }
}
;)
 

Shelfelf

Mitglied
0k, ich habe jetzt versucht die paint Methode zu überschreiben. Ein paar Dinge sind mit allerdings noch nicht klar:
Wie beziehe ich die paint-Methode auf das Feld in der Tabelle, in das das Dreieck gezeichnet werden soll (c.getGraphics() gibt anscheinend null zurück (siehe code-Beispiel))
Welche Koordinaten muss ich wählen, damit ◤ entsteht?
Java:
package test;

import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JTable;
import java.awt.BorderLayout;
import javax.swing.JScrollPane;

public class Test {

   private JFrame frame;
   private JScrollPane scrollPane;
   private JTable table;

   /**
    * Launch the application.
    */
   public static void main(String[] args) {
     EventQueue.invokeLater(new Runnable() {
       public void run() {
         try {
           Test window = new Test();
           window.frame.setVisible(true);
         } catch (Exception e) {
           e.printStackTrace();
         }
       }
     });
   }

   /**
    * Create the application.
    */
   public Test() {
     initialize();
   }

   /**
    * Initialize the contents of the frame.
    */
   private void initialize() {
     frame = new JFrame();
     frame.setBounds(100, 100, 450, 300);
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
     scrollPane = new JScrollPane();
     frame.getContentPane().add(scrollPane, BorderLayout.CENTER);
    
     int [][]matrix = {
         {0,1,2,3,0},
         {0,1,2,3,0},
         {0,1,2,3,0},
         {0,1,2,3,0},
         {0,1,2,3,0}
     };
     MyTableModel model = new MyTableModel();
     model.setMatrix(matrix);
     table = new JTable(model);
     table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
     table.setRowHeight(50);
     for (int i = 0; i < 5; i++) {
       table.getColumnModel().getColumn(i).setPreferredWidth(50);
     }
     MyCellRenderer renderer = new MyCellRenderer();
     table.setDefaultRenderer(Object.class, renderer);
     scrollPane.setViewportView(table);
   }
}
Java:
package test;

import javax.swing.table.AbstractTableModel;

public class MyTableModel extends AbstractTableModel{
   int[][]matrix= new int[5][5];
   
   public void setMatrix(int[][]matrix){
     this.matrix=matrix;
   }
   @Override
   public int getRowCount() {
     return 5;
   }

   @Override
   public int getColumnCount() {
     return 5;
   }

   @Override
   public Object getValueAt(int rowIndex, int columnIndex) {
     return matrix[rowIndex][columnIndex];
   }
}
Java:
package test;

import java.awt.Component;
import java.awt.Graphics;
import java.awt.Polygon;

import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;

public class MyCellRenderer extends DefaultTableCellRenderer{
   private int dreieck;
   private int[] xPoints0 = { 0, 0, 50 };
   private int[] yPoints0 = { 0, 50, 50 };
   private int[] xPoints1 = { 50, 0, 50 };
   private int[] yPoints1 = { 0, 50, 50 };
   private int[] xPoints2 = { 0, 0, 50 };
   private int[] yPoints2 = { 50, 0, 0 };
   private int[] xPoints3 = { 0, 50, 50 };
   private int[] yPoints3 = { 0, 0, 50 };
   private Polygon p0 = new Polygon(xPoints0, yPoints0, 3);
   private Polygon p1 = new Polygon(xPoints1, yPoints1, 3);
   private Polygon p2 = new Polygon(xPoints2, yPoints2, 3);
   private Polygon p3 = new Polygon(xPoints3, yPoints3, 3);
   
   @Override
   public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus,
       int row, int column) {

     Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);

     if ((int)(table.getValueAt(row, column))== 0) {
       dreieck=0;
       this.paint(c.getGraphics());
     } else if ((int)(table.getValueAt(row, column))== 1) {
       dreieck=1;
       this.paint(c.getGraphics());
     }else if ((int)(table.getValueAt(row, column))== 2) {
       dreieck=2;
       this.paint(c.getGraphics());
     } else if ((int)(table.getValueAt(row, column))== 3) {
       dreieck=3;
       this.paint(c.getGraphics());
     }
     return c;
   }

   @Override
   public void paint(Graphics g) {
     super.paint(g);

     if (dreieck == 0) {
       g.drawPolygon(p0);
     } else if (dreieck == 1) {
       g.drawPolygon(p1);
     } else if (dreieck == 2) {
       g.drawPolygon(p2);
     } else if (dreieck == 3) {
       g.drawPolygon(p3);
     }
   }
}
 

X5-599

Top Contributor
Anstelle von "public void paint()" sollte eher die "protected void paintComponent(Graphics g)" überschrieben werden. Weiss nicht mehr genau warum. Aber dein eigentliches Problem ist: Du ruft die paint() Methode selber auf. Das macht man in der Regel nicht. Ich weiss auch gar nicht, ob es überhaupt Situationen gibt, in denen es Sinn macht sie selbst aufzurufen... Vielleicht weiss hier jemand mehr.

Lass die Zeilen: this.paint(c.getGraphics()); weg und du wirst die Dreiecke sehen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Dreiecke zeichen AWT, Swing, JavaFX & SWT 3
S JavaFX WebView zeigt bestimmte Websites nicht an AWT, Swing, JavaFX & SWT 2
C Kleineres Bild an bestimmte Koordinaten setzen AWT, Swing, JavaFX & SWT 6
C JList: Bestimmte Objekte ausschließen AWT, Swing, JavaFX & SWT 1
Meeresgott AWT JFileChooser bestimmte Ordner anzeigen AWT, Swing, JavaFX & SWT 16
P Bestimmte Kreise färben AWT, Swing, JavaFX & SWT 3
J JavaFX Bestimmte Zellen im TableView ändern (Farbe und Text) AWT, Swing, JavaFX & SWT 1
T Nur bestimmte Bereiche eines Fotos bearbeiten AWT, Swing, JavaFX & SWT 0
stylegangsta JDialog bestimmte Zeilen kursiv AWT, Swing, JavaFX & SWT 20
F Event Handling JTextArea auf bestimmte Eingabe reagieren (Return-Taste) AWT, Swing, JavaFX & SWT 2
D Swing Bestimmte Berechnung von Spalten durchführen und dann die Zeilen nach bestimmten Kriterien einfärben AWT, Swing, JavaFX & SWT 5
P DefaultStyledDocument eingegebenen String durchsuchen und bestimmte Sachen einfärben AWT, Swing, JavaFX & SWT 1
A Swing Bestimmte Werte anzeigen JSlider() AWT, Swing, JavaFX & SWT 2
L Swing ActionListener zugriff auf bestimmte Elemente AWT, Swing, JavaFX & SWT 3
K LayoutManager Buttons auf bestimmte x und y Koordinaten AWT, Swing, JavaFX & SWT 2
4 AWT bestimmte Objekte zeichnen und löschen AWT, Swing, JavaFX & SWT 8
GianaSisters Swing jTable (bestimmte Zellen umrahmen) AWT, Swing, JavaFX & SWT 8
M [erledigt] Bestimmte Zeile aus JTextArea löschen AWT, Swing, JavaFX & SWT 3
J Swing jSlider nur auf bestimmte werte beschränken AWT, Swing, JavaFX & SWT 15
Z AWT Auf bestimmte Checkbox einer Checkboxgroup zugreifen AWT, Swing, JavaFX & SWT 3
S JTable: Eingabe nur für bestimmte Var.Typen zulassen AWT, Swing, JavaFX & SWT 13
B JTable: Zeilen sortieren, aber bestimmte Zeilen fest lassen AWT, Swing, JavaFX & SWT 9
E Komponenten die wie bestimmte Symbole aussehen AWT, Swing, JavaFX & SWT 6
M Swing JList --> Selektion für bestimmte Indexe verbieten? AWT, Swing, JavaFX & SWT 8
T JComboBox: ActionListener/ItemListener wie nur auf bestimmte Events reagieren? AWT, Swing, JavaFX & SWT 7
borobudur Bestimmte Zone auf einem Bild definieren AWT, Swing, JavaFX & SWT 7
dl85hej bestimmte Zeile anspringen AWT, Swing, JavaFX & SWT 3
R Bestimmte Komponenten vom Neuzeichnen abhalten AWT, Swing, JavaFX & SWT 2
G Bild a auf Bild b, bestimmte Farbe (zb Weiß) durchsichtig AWT, Swing, JavaFX & SWT 7
G Aus Arraylist bestimmte Objekte wiedergegeben bekommen? AWT, Swing, JavaFX & SWT 7
F Wie bestimmte Obj. einer ContentPane abfragen und vergl? AWT, Swing, JavaFX & SWT 11
G Bei JTable eine bestimmte Zelle färben AWT, Swing, JavaFX & SWT 11
R nur bestimmte Daten in JTable anzeigen lassen? AWT, Swing, JavaFX & SWT 3
A Bestimmte Spalten nicht editierbar machen AWT, Swing, JavaFX & SWT 6
C JFormattedTextField - nur bestimmte Zeichen zulassen AWT, Swing, JavaFX & SWT 3
A JTable, bestimmte Zeilen blau hinterlegen AWT, Swing, JavaFX & SWT 3
K Punkte in eine bestimmte Richtung bewegen AWT, Swing, JavaFX & SWT 5
L Again: In JTable bestimmte Zellen färben AWT, Swing, JavaFX & SWT 12
S JCellRenderer läuft nur einmal in bestimmte Bedingung AWT, Swing, JavaFX & SWT 5
B JEditorPane: Höhe für bestimmte Breite bestimmen AWT, Swing, JavaFX & SWT 4
V Bestimmte Spalten im JTable nicht anzeigen AWT, Swing, JavaFX & SWT 2
S Bestimmte Zellenselektion in einer JTable AWT, Swing, JavaFX & SWT 12
C Wie skaliere ich ein Image in eine bestimmte größe? AWT, Swing, JavaFX & SWT 2
M Bestimmte GUI erstellen: Layoutproblem AWT, Swing, JavaFX & SWT 17
K Objekt in eine bestimmte Zelle eines JTables legen AWT, Swing, JavaFX & SWT 3
B ComboBox: nur bestimmte Zeichen zulassen AWT, Swing, JavaFX & SWT 5
B Eingabefelder nur für bestimmte Werte AWT, Swing, JavaFX & SWT 8
W JFileChooser; nur bestimmte Datein AWT, Swing, JavaFX & SWT 5
S Mehrere Tabellen Zellen gleichzeitig färben AWT, Swing, JavaFX & SWT 5
P JTable Listener für die Änderung einzelner Zellen oder Rows AWT, Swing, JavaFX & SWT 2
I JavaFX Zellen in Tableview editieren AWT, Swing, JavaFX & SWT 0
B JTable Zellen zusammenfügen AWT, Swing, JavaFX & SWT 3
B JavaFX TableView-Zellen sollen automatisch so groß wie der größte Inhalt sein AWT, Swing, JavaFX & SWT 6
J Tableview - kann man mit Enter die Zellen wechseln AWT, Swing, JavaFX & SWT 1
S JavaFX GridPane Zellen Seitenverhätnis passend ändern mit der Stage AWT, Swing, JavaFX & SWT 0
E JavaFX TableView mit Zeilenumbruch in Zellen AWT, Swing, JavaFX & SWT 5
L Swing CellRenderer für einzelne Zellen? AWT, Swing, JavaFX & SWT 5
F JTable Zellen-Hintergrund ändern AWT, Swing, JavaFX & SWT 7
J Zellen in JavaFx einfärben funktioniert nicht AWT, Swing, JavaFX & SWT 1
A Swing JTable Umgang mit Zellen AWT, Swing, JavaFX & SWT 2
S Swing Zeilenumbruch in JTable Zellen AWT, Swing, JavaFX & SWT 3
D Swing Mit TableCellRenderer einzelne Zellen markieren AWT, Swing, JavaFX & SWT 3
M Swing Jtable zellen zentrieren AWT, Swing, JavaFX & SWT 4
J CellEditorListener wird für ALLE Zellen ausgeführt AWT, Swing, JavaFX & SWT 2
V JTable: Zugriff auf einzelne Zellen AWT, Swing, JavaFX & SWT 4
M JTable Zeilen und Zellen einfärben AWT, Swing, JavaFX & SWT 11
GUI-Programmer JTable - zentrierte Zellen AWT, Swing, JavaFX & SWT 2
K Swing CellEditor für einzelne Zellen AWT, Swing, JavaFX & SWT 2
B JTable Selektion von Zellen AWT, Swing, JavaFX & SWT 3
GianaSisters Swing JTable Zellen intelligenter Zeilenumbruch AWT, Swing, JavaFX & SWT 4
K Swing JTable Editierfunktion für einzelne Zellen ausschalten AWT, Swing, JavaFX & SWT 3
E Swing zellen fixen AWT, Swing, JavaFX & SWT 7
X JTable Zellen nicht editierbar AWT, Swing, JavaFX & SWT 5
S Swing JTable - Editierung von Zellen abfangen AWT, Swing, JavaFX & SWT 3
C [SWT] Widget Table verliert nach Sortierung farbige / eingefärbter Background / Zellen AWT, Swing, JavaFX & SWT 3
T JTable Zellen Farbe AWT, Swing, JavaFX & SWT 13
N Swing JTable: Zellen verbinden AWT, Swing, JavaFX & SWT 11
N Zellen einer JTable unterschiedlich formatieren AWT, Swing, JavaFX & SWT 7
D Swing JTable, Zellen-Farbe über Koordinaten ändern AWT, Swing, JavaFX & SWT 9
J Swing JTable, eigener TableCellRenderer Keine Anzeige in den Zellen AWT, Swing, JavaFX & SWT 8
D Swing JTable Problem bei automatischem update von Zellen AWT, Swing, JavaFX & SWT 3
G JTable Multiple Row Header Example - Probleme mit der Höhe der Zellen AWT, Swing, JavaFX & SWT 4
C Swing JTable: Horizontale Linie bei einzelnen Zellen ausblenden AWT, Swing, JavaFX & SWT 5
C JTable: Alle selektierten Zellen abfangen AWT, Swing, JavaFX & SWT 13
C GridBagLayout Zellen verbinden AWT, Swing, JavaFX & SWT 13
V Nur zulässige Zeichen in JTable-Zellen eintragen können AWT, Swing, JavaFX & SWT 2
C Spielfeld Gitter - Einzelne Zellen verändern AWT, Swing, JavaFX & SWT 18
J CellRenderer einzelne zellen Hintergrund AWT, Swing, JavaFX & SWT 9
F Text Vertical in Zellen von JTable AWT, Swing, JavaFX & SWT 3
B Swing Drag&Drop einzelner Zellen in einer JTable AWT, Swing, JavaFX & SWT 12
S Swing JTable Auswahl mehrerer Zellen mit STRG+Maus AWT, Swing, JavaFX & SWT 3
A Flexible JTable mit editierbaren Zellen,abhängig von Data AWT, Swing, JavaFX & SWT 2
C JTable und farbige Zellen AWT, Swing, JavaFX & SWT 5
S Übernehmen von Inhalten aus Zellen in JTables ohne Return AWT, Swing, JavaFX & SWT 7
R JTable: Zellen einer Spalte unterschiedlich befüllen AWT, Swing, JavaFX & SWT 2
R JTable: Zellen einer Zeile zusammenfassen? AWT, Swing, JavaFX & SWT 3
R JTable darstellen von leeren Zellen AWT, Swing, JavaFX & SWT 12
E Drag&Drop JTable; Renderer füllt alle Zellen AWT, Swing, JavaFX & SWT 10
R JTable updatePaint() angabe der geänderten Zellen AWT, Swing, JavaFX & SWT 3
R JTable mehrere Zellen mit Shift selektieren AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben