2017-07-18 5 views
1

Als ich nach etwas über die Java-Dokumentation suchte, wurde mir klar, dass es eine Art von Verschachtelung gab, die ich noch nie zuvor gesehen hatte. Wenn Sie erklären könnten, wie es heißt oder wie es heißt, wäre ich sehr dankbar.Wie funktioniert diese Verschachtelung? [TableRowRenderingTip.java]

Es ist meine erste Frage in StackOverflow, also tut mir leid, wenn ich eine Regel gebrochen habe.

Code:

private JComponent createData(DefaultTableModel model) 
{ 
    JTable table = new JTable(model) 
    { //What are these brackets for? I know it contains a method but I've never seen a method "nested" with a variable initialization. 
     public Component prepareRenderer(TableCellRenderer renderer, int row, int column) 
     { 
      Component c = super.prepareRenderer(renderer, row, column); 

      // Color row based on a cell value 

      if (!isRowSelected(row)) 
      { 
       c.setBackground(getBackground()); 
       int modelRow = convertRowIndexToModel(row); 
       String type = (String)getModel().getValueAt(modelRow, 0); 
       if ("Buy".equals(type)) c.setBackground(Color.GREEN); 
       if ("Sell".equals(type)) c.setBackground(Color.YELLOW); 
      } 

      return c; 
     } 
    }; 

nicht wirklich wissen, wie man richtig die Frage-Editor verwenden.

Vielen Dank im Voraus!

Here's der vollständige Quellcode.

Antwort

1

Was Sie gefunden haben, wird als anonyme Klasse bezeichnet. In dem Beispiel wird die Klasse JTable erweitert, aber weil sie nicht mehrfach verwendet werden soll, gibt sie der neuen Klasse keinen Namen (daher anonym), stattdessen erstellt sie sofort eine Instanz und speichert sie in der Variablen table . In der neuen Klasse überschreibt es die prepareRenderer Methode der ursprünglichen JTable.

Hier können Sie mehr über anonyme Klassen lesen: https://docs.oracle.com/javase/tutorial/java/javaOO/anonymousclasses.html

+0

Danke für die schnelle Antwort! – MikeMapanare