Paint(Graphics g) metodu java.awt.Označení odvozené třídy není nazývají

0

Otázka

Učební plán pro mého syna škola stále patří studentům učení Java AWT. I když nemyslím si, že to je nejlepší přístup, nemůžu to změnit, protože to je stanovené Ministerstvem Školství. Každopádně, snažím se pomoci mému synovi s jeho cvičení, jak jsem naprogramován AWT sebe před mnoha lety. Ale mám problém s rendering štítky. Co jsem vlastně po je vytvořit jednoduchou tabulku v AWT, od tabulky chybí. Přístup je, aby se GridLayout a přidat Popisky. To funguje dobře, ale chtěl jsem mít separace linky mezi sloupci a řádky. Proto jsem se sub-klasifikovány Štítku a přepsal malovat jako tak:

V Tabulce I. třídy udělat

public class Table extends Container {
    ...
    this.setLayout(new GridLayout(rows+1, cols));
    for(int i=0; i<cols; i++) {
        for(int y=0; y< rows; y++) {
            TableLabel label = new TableLabel(rowData[i][y].toString()); 
            add(label);
        }
    }
    ...
}

který se odkazuje na

public class TableLabel extends Label {

    public TableLabel(String labelText) {
        super(labelText);
    }

    public void paint​(Graphics g) {
        super.paint(g);
        System.out.println("paint");
        Graphics2D g2 = (Graphics2D)g;
        g2.setPaint(Color.BLUE);
        g2.drawRect(getX(), getY(), getWidth(), getHeight());
    }
    
    public void update​(Graphics g) {
        super.update(g);
        System.out.println("update");
        Graphics2D g2 = (Graphics2D)g;
        g2.setPaint(Color.BLUE);
        g2.drawRect(getX(), getY(), getWidth(), getHeight());
    }
}

Vykreslování nezměnil. Podle debugger ani barvy, ani aktualizace jsou někdy nazývá. Také println není psaní do konzole. Co jsem chybí? Aplikace je sestaven a běží pod Javou 11. Já vím, AWT a verze 11 je docela pevné, ale to je dané nastavení. Děkuji předem.

awt inheritance java paint
2021-11-23 17:31:33
2
0

Následující kód funguje pro mě. Můžete rozšířit svůj kód tak, aby zahrnoval reprodukovatelné problém? A prosím, přesně popsat, v čem je problém, takže můžeme být jisti, že jsme při pohledu na stejnou věc.

public class AwtPaint {
   
   public static void main( String[] args ) {
      SwingUtilities.invokeLater( AwtPaint::init );
   }
   
   private static void init() {
      JFrame frame = new JFrame();
      
      Table myTable = new Table( 3, 3 );
      frame.add( myTable );
      
      frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
      frame.pack();
      frame.setLocationRelativeTo( null );
      frame.setVisible( true );
   }
   
}

class Table extends Container {
    public Table( int rows, int cols ) {
    this.setLayout(new GridLayout(rows+1, cols));
    for(int i=0; i<cols; i++) {
        for(int y=0; y< rows; y++) {
            TableLabel label = new TableLabel( "Col: " + i + ", row: " + y ); 
            add(label);
        }
    }
    }
}
class TableLabel extends Label {

    public TableLabel(String labelText) {
        super(labelText);
    }

    public void paint​(Graphics g) {
        super.paint(g);
        System.out.println("paint");
        Graphics2D g2 = (Graphics2D)g;
        g2.setPaint(Color.BLUE);
        g2.drawRect(getX(), getY(), getWidth(), getHeight());
    }
    
    public void update​(Graphics g) {
        super.update(g);
        System.out.println("update");
        Graphics2D g2 = (Graphics2D)g;
        g2.setPaint(Color.BLUE);
        g2.drawRect(getX(), getY(), getWidth(), getHeight());
    }
}
2021-11-23 17:43:25

Vždy přidat @Override. Možná - nejsem si jist - drawRect(0, 0, .... Volání super.paint není potřeba.
Joop Eggen
0

Děkuji vám za všechny zpětné vazby. Já pořád nevím, co vlastně bylo špatně, ale když jsem sledoval Joop návrh a vstoupil "@Override", Eclipse mi ukázal chybu, říká, že můj podpis je neznámý. Nemohl jsem vidět rozdíl v dokumentaci, ale vypouští kód a vytvořil metodu znovu, tentokrát pomocí Přepsání funkce Eclipse. Teď už to funguje. Možná mimo tisknutelný znak někde v řadě?!

Mimochodem, zatímco barva je nyní nazýván, modrá hranice je stále ještě není vykreslen. Nahradil jsem "setPaint" s "setColor" bez úspěchu. Zkoušel jsem i návrh stanovení hgap a vgap, ale vzhledem k tomu, štítky mají stejnou barvu pozadí jako Kontejner Tabulky, mezery jsou neviditelné. A při nastavení pozadí nádrže štítky jsou změněny, ale ne kontejner. To je problém s Kontejnerem. Poté, co jsem změnil, že Tabulka je již rozšíření Kontejneru, ale Panel, změny pozadí Tabulky jsou již předány štítky. Teď můžu nastavit různé barvy do tabulky a štítky pomocí setBackground od té doby, co jsem kódované v barvě metoda neměl žádný vliv. Myslím, že to byl důvod, proč přijít s Swing ;-)

2021-11-23 20:33:31

V jiných jazycích

Tato stránka je v jiných jazycích

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................