Paint(Graphics g) spôsob java.awt.Označenie odvodené triedy nie nazýva

0

Otázka

Učebné osnovy pre môjho syna školy stále obsahuje študenti vzdelávania Java AWT. Aj keď si nemyslím, že to je najlepší prístup, nemôžem to zmeniť, pretože je nastavený Ministerstvom Školstva sr. Každopádne, ja sa snažím pomôcť môj syn s jeho cvičenia, ako som naprogramované AWT sám pred mnohými rokmi. Ale mám problém s vykresľovaním štítky. To, čo som vlastne po je vytvoriť jednoduché tabuľky v AWT, pretože stoly chýbajú. Prístup je vziať GridLayout a pridať Štítky na to. To funguje, ale ja som chcel mať rozchode čiary medzi stĺpcami a riadkami. Preto som sa sub-klasifikovať Štítok a overwrote farby ako tak:

V Tabuľke triedy som to

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);
        }
    }
    ...
}

čo sa týka

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());
    }
}

Poskytovanie nezmenila. Podľa ladiaci nástroj ani farba, ani update sa niekedy nazýva. Aj println nie je písomne konzoly. Čo mám chýba? Žiadosti je zostavený a beží pod Java 11. Viem, AWT a verzie 11 je druh káblové, ale to je dané nastavenie. Ďakujem vopred.

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

Nasledujúci kód pracuje pre mňa. Môžete si rozšíriť svoj kód zahrnúť reprodukovateľné problém? A popíšte presne v čom je problém, takže môžeme byť istí, že sme pohľade na tú istú vec.

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 pridať @Override. Možno - ja som nie ste si istí, - drawRect(0, 0, .... Zavolať super.paint nie je potrebné.
Joop Eggen
0

Ďakujem za všetky názory. Stále neviem, čo bolo skutočne zle, ale keď som sledoval Joop návrh a vstúpil "@Override", Eclipse ukázala mi chyba, povedal, že môj podpis je neznámy. Nemohol som vidieť rozdiel dokumentácie, ale vymaže kód a vytvoril metódu, opäť, tentoraz pomocou Prepísať funkčnosť Eclipse. Teraz to funguje. Možno non viacúčelový charakter niekde v rade?!

Mimochodom, zatiaľ čo farby, ktorá sa teraz nazýva, modrá hranice stále nie sú poskytované. Som nahradil "setPaint" s "setColor" bez úspechu. Tiež som sa snažil návrh nastavenie hgap a vgap, ale keďže menovky majú rovnakú farbu pozadia ako Kontajner Tabuľky, rozdiely sú neviditeľné. A keď nastavenie pozadia kontajnera etikety sú zmenili, ale nie kontajnera. Že je problém s Kontajnerom. Po zmenil som sa, že Stôl je už predlžuje Kontajner, ale Panel, zmeny pozadia Tabuľky sú už odovzdané na štítky. Teraz som si nastaviť rôzne farby do tabuľky a štítky pomocou setBackground odvtedy, čo som naprogramoval v laku metóda nemalo žiadny vplyv. Myslím, že tam bol dôvod, prečo prísť s Swing ;-)

2021-11-23 20:33:31

V iných jazykoch

Táto stránka je v iných jazykoch

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