repaint () не вызывается при запуске приложения из Eclipse? - PullRequest
2 голосов
/ 22 августа 2010

Я никогда не пишу "рисовать" в окно командной строки, когда использую Eclipse и Run-> cmd для запуска программы.Это работает нормально, если я запускаю System.out.print () из paintComponent в другой программе.Кто-то, кто может помочь?

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 ]

3 голосов
/ 22 августа 2010

Компонент должен быть добавлен в видимое окно / фрейм / компонент для вызова его paintComponent.
GUI добавляется только как KeyListener, но не добавляется ни в JFrame, ни в любой другой видимый компонентв коде выше.Нет причины для вызова paintComponent, так как компонент вообще не отображается.

2 голосов
/ 22 августа 2010

Существует ряд проблем с вашим кодом:

  1. Ваша панель графического интерфейса не находится в рамке (не должна ли она быть добавлена ​​вместо панорамирования?)
  2. String s не инициализирован, что вызывает исключение NullPointerException
  3. краска должна быть переопределена вместо paintComponents
  4. краска не должна изменять состояние компонента, потому что его можно вызвать в любое время.
  5. и т.д ...
0 голосов
/ 22 августа 2010

Я использую это с AWT (не уверен на 100%, работает ли он и в Swing ...)

Graphics g = _yourcomponent_.getGraphics();
if (g != null) {
    _yourcomponent_.paint(g);
    // below the estimated code for Swing:
    _yourcomponent_.paintComponent(g);
}
0 голосов
/ 22 августа 2010

Возможно, вы пропустили вывод "System.out.println (" paint ");"?

GUI-приложения под Windows не могут записывать на консоль (у них нет консоли, потому что было бы плохо, если бы каждое GUI-приложение также открывало черное окно).

В Windows есть два java-интерпретатора: "javaw.exe", который является GUI-приложением и молча отбрасывает любые записи System.out.И "java.exe", который является консольным приложением и позволяет писать в консоль.Попробуйте запустить вашу программу с "java.exe"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...