Domanda

Ho un jrame su cui aggiungo alcuni oggetti JComponent. Ogni JComponent ha una lista di contenitori aggiungo utilizzando JComponent.add (Component).

Ora, nella mia classe principale JComponent, chiamato MyComponent, ho l'override del metodo paintComponent protetta dove posso dipingere le cose, che funziona piuttosto bene.

Ma non voglio dipingere sulla principale JComponent, voglio solo dipingere sui contenitori che ho aggiunto al mio principale JComponent.

Quindi, in MyComponent in paintComponent faccio la seguente.

protected void paintComponent( Graphics g) {
  super.paintComponent( g);

  Graphics page_g = this.getPage( "main").getGraphics();

  page_g.setColor( Color.RED);
  page_g.drawRect( 10, 10, this.getWidth() - 20, this.getHeight() - 20);
  page_g.setColor( Color.BLUE);
  page_g.drawString( "HELLO WORLD", this.getWidth() / 2, this.getHeight() / 2);
}

La linea this.getPage ( "principale") getGraphics ().; prende l'oggetto Graphics da uno dei miei contenitori aggiunti all'elenco MyComponents dei contenitori e, naturalmente, alla principale lista dei componenti utilizzando JComponents aggiungono metodo. Il contenitore è impostato su visibile chiamando il setVisible (true); metodo.

Ma non succede nulla. Lo schermo è vuoto. Se si sostituisce page_g con g, poi la pittura opere, perché la sua pittura su mia JComponent (MyComponent), ma voglio dipingere sul contenitore che è per bambini di MyComponent in questo caso.

Ho sentito spesso "uso getGraphics Mai ()". Ma in quale altro modo si può solo disegnare su componenti secondari di un componente genitore quando il metodo genitori paintComponent viene chiamato?

È stato utile?

Soluzione

In realtà la soluzione migliore è quella di avere le classi che sta effettivamente facendo il dipinto di override personalizzato il loro metodo proprio paintComponent (). Lasciate che la preoccupazione AWT sui contesti grafici.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top