2

当我使用 Eclipse 和 Run->cmd 运行程序时,我从来没有将“paint”写入我的命令行窗口。如果我在另一个程序中从 paintComponent 运行 System.out.print(),它工作正常。有人可以帮忙吗?

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

4 回答 4

3

该组件必须添加到可见的窗口/框架/组件paintComponent才能被调用。
GUI仅作为 KeyListener 添加,但既没有添加到 JFrame,也没有添加到上面代码中的任何其他可见组件。没有理由调用paintComponent,因为组件根本没有显示。

于 2010-08-22T19:21:35.553 回答
2

您的代码存在许多问题:

  1. 您的 GUI 面板不在框架中(不应该添加它而不是平移吗?)
  2. String s 未初始化,导致 NullPointerException
  3. 应该覆盖paint 而不是paintComponents
  4. paint 不应该改变组件的状态,因为它可以随时调用。
  5. ETC...
于 2010-08-22T18:20:57.247 回答
0

您可能会错过“System.out.println("paint");”的输出 ?

Windows 下的 GUI-Apps 无法写入控制台(他们没有控制台,因为如果每个 GUI-App 也会打开一个黑色窗口,那就太糟糕了)。

Windows 下有两个 java-interpreter:“javaw.exe”,它是一个 GUI-App,默默地丢弃任何 System.out-writes。“java.exe”是一个控制台应用程序,允许写入控制台。尝试使用“java.exe”启动您的程序

于 2010-08-22T18:14:47.617 回答
-1

我将它与 AWT 一起使用(不是 100% 确定它是否也在 Swing 中工作......)

Graphics g = _yourcomponent_.getGraphics();
if (g != null) {
    _yourcomponent_.paint(g);
    // below the estimated code for Swing:
    _yourcomponent_.paintComponent(g);
}
于 2010-08-22T18:55:46.037 回答