Java'nın paint (Graphics g) yöntemi.awt.Etiket türetilmiş sınıf çağrılmadı

0

Soru

Oğlumun okulunun müfredatı hala Java AWT öğrenen öğrencileri içeriyor. Bunun en iyi yaklaşım olduğunu düşünmesem de, Milli Eğitim Bakanlığı tarafından belirlendiği için bunu değiştiremem. Her neyse, yıllar önce awt'yi kendim programladığım gibi oğluma egzersizleri konusunda yardım etmeye çalışıyorum. Ama etiket oluşturma ile ilgili bir sorunum var. Aslında peşinde olduğum şey, tablolar eksik olduğundan awt'de basit bir tablo oluşturmaktır. Yaklaşım, bir GridLayout almak ve ona Etiket eklemektir. Bu iyi çalışıyor ancak sütunlar ve satırlar arasındaki ayırma çizgilerine sahip olmak istedim. Bu yüzden Etiketi alt sınıfladım ve boyayı bu şekilde yeniden yazdım:

Tablo sınıfında yapıyorum

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

anlamına gelir

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

Görüntü oluşturma değişmedi. Hata ayıklayıcıya göre ne paint ne de update çağrılmaz. Ayrıca println konsola yazmıyor. Neyi kaçırıyorum? Uygulama derlenmiş ve Java 11 altında çalışır. Biliyorum, AWT ve sürüm 11 biraz kablolu, ancak verilen kurulum bu. Şimdiden teşekkür ederim.

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

Aşağıdaki kod benim için çalışıyor. Kodunuzu tekrarlanabilir bir sorun içerecek şekilde genişletebilir misiniz? Ve lütfen sorunun tam olarak ne olduğunu açıklayın, böylece hepimizin aynı şeye baktığından emin olabiliriz.

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

Her zaman ekle @Override. Belki-Emin değilim - drawRect(0, 0, .... Seslenmek super.paint gerekli değil.
Joop Eggen
0

Tüm geri bildirimler için teşekkür ederiz. Gerçekte neyin yanlış olduğunu hala bilmiyorum, ancak Joop'un önerisini takip edip "@Override" yazdığımda Eclipse bana imzamın bilinmediğini söyleyen bir hata gösterdi. Dokümantasyonda bir fark göremedim, ancak kodu sildim ve yöntemi tekrar oluşturdum, bu sefer Eclipse'in Üzerine Yazma işlevini kullanarak. Şimdi işe yarıyor. Belki de satırda bir yerde yazdırılamayan bir karakter?!

Bu arada, boya şimdi çağrılırken, mavi kenarlık hala oluşturulmuyor. Başarılı olamadan "setPaint" i "setColor" ile değiştirdim. Ayrıca bir hgap ve vgap ayarlama önerisini de denedim, ancak etiketler Tablonun Kabıyla aynı arka plan rengine sahip olduğundan boşluklar görünmez. Ve kapsayıcının arka planını ayarlarken etiketler değiştirilir, ancak kapsayıcı değiştirilmez. Bu Kapsayıcı ile ilgili bir sorundur. Tablonun artık Kapsayıcıyı değil Paneli genişlettiğini değiştirdikten sonra, Tablonun arka planındaki değişiklikler artık etiketlere iletilmez. Artık paint yönteminde kodladığım her şeyin hiçbir etkisi olmadığından setBackground kullanarak tabloya ve etiketlere farklı renkler ayarlayabilirim. Sanırım Swing ile gelmek için bir sebep vardı; -)

2021-11-23 20:33:31

Diğer dillerde

Bu sayfa diğer dillerde

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