Domanda

Non ho mai ottenere "dipingere" scritto a mia finestra riga di comando quando io uso Eclipse e Esegui-> cmd per eseguire il programma. Funziona bene se corro System.out.print () da paintComponent in un altro programma. Qualcuno che può aiutare?

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class GUI extends JPanel implements KeyListener, ActionListener
 {
  private static final long serialVersionUID = 1L;
  JFrame frmMain = new JFrame("Kodning");
  JTextField text = new JTextField();
  JPanel pan = new JPanel();
  static char bokstav;
  static int x=10, y=80;
  boolean convert = false;
  String s;
  Timer t = new Timer(10, this);
  public static void main(String[] args)
   {

    @SuppressWarnings("unused")
    GUI g = new GUI();

   }

  public GUI()
   {
    frmMain.setSize(600, 120);
    frmMain.setLayout(new GridLayout(2, 1));
    frmMain.addWindowListener(hornStang());
    frmMain.add(text);
    frmMain.add(pan);
    frmMain.setFocusable(true);
    frmMain.setVisible(true);
    frmMain.addKeyListener(this);
    text.addKeyListener(this);
    pan.addKeyListener(this);
    t.start();
   }
  private static WindowAdapter hornStang() 
   {
    return new WindowAdapter() 
     {
      public void windowClosing(WindowEvent e) 
       {
        System.exit(0);
       }
     };
   }
  public void keyPressed(KeyEvent e)
   {
    if(e.getKeyCode()== KeyEvent.VK_ENTER)
     {
      System.out.println("dechifrera");
      repaint();
      deshiffrera(text.getText());
     }
   }
  public void keyReleased(KeyEvent arg0){}
  public void keyTyped(KeyEvent arg0){}
  public void deshiffrera(String s) 
   {
    s = this.s;
    repaint();
   }
  @override
  public void paintComponent(Graphics g)
   {
    System.out.println("paint");
    for(int i=0;i<s.length();i++)
     {
      bokstav = s.charAt(i);
      switch (bokstav)
       {
        case 'a':nere(g); hoger(g); prick(g, 0); break;
        //en massa case
        default:break;
       }
      x=x+12;
     }
   }
  @Override
  public void actionPerformed(ActionEvent e)
   {
    repaint();
   }
 }
È stato utile?

Soluzione

Il componente deve essere aggiunto ad una visibile la finestra / frame / componente per la sua paintComponent di essere chiamato.
GUI viene aggiunto solo come KeyListener ma non è né aggiunto alla JFrame, né alcun altro componente visibile nel codice precedente. Non c'è alcuna ragione per chiamare paintComponent poiché la componente non viene visualizzato affatto.

Altri suggerimenti

Ci sono una serie di problemi con il codice:

  1. Il vostro pannello di interfaccia grafica non è nel telaio (non dovrebbe essere aggiunto al posto del pan?)
  2. String s non è inizializzato, che provoca una NullPointerException
  3. vernice dovrebbe essere ignorato, invece di paintComponents
  4. pittura non dovrebbe cambiare lo stato del componente, perché può essere chiamato in qualsiasi momento.
  5. ecc ...

Probabilmente manca l'uscita di "System.out.println (" dipingere ");" ?

GUI Applicazioni sotto Windows non posso scrivere alla console (essi non hanno una console, perché avrebbe fatto schifo se ogni GUI-app sarebbe anche aprire una finestra nera).

Ci sono due java-interpreti sotto le finestre: "javaw.exe" che è una GUI-app e silenziosamente rigetti in qualsiasi System.out-scrittura. E "java.exe", che è una console-app e permette di scrivere alla console. Provare ad avviare il programma con "java.exe"

Io lo uso con AWT (non al 100% sicuro se si sta lavorando in Swing troppo ...)

Graphics g = _yourcomponent_.getGraphics();
if (g != null) {
    _yourcomponent_.paint(g);
    // below the estimated code for Swing:
    _yourcomponent_.paintComponent(g);
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top