2010-08-22 8 views
2

Eclipse를 사용하고 실행 -> cmd를 사용하여 프로그램을 실행하면 "명령"창이 내 명령 줄 창에 표시되지 않습니다. 다른 프로그램의 paintComponent에서 System.out.print()를 실행하면 정상적으로 작동합니다. 도울 수있는 누군가?Eclipse에서 앱을 실행할 때 repaint()가 호출되지 않습니까?

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

나는 당신이하고 싶은 것을 모른다. 나는 그 문제가 뭔지 모른다. 그러나 명령 행에 그릴 수는 없습니다. 그것은 문자 (텍스트)만을위한 것입니다. –

+0

여전히 문제를 보여주는 가능한 가장 작은 프로그램으로 프로그램을 줄일 수 있습니까? 그러면 StackOverflow에서 도움이되며 문제를 찾을 때 도움이 될 수도 있습니다. –

답변

3

구성 요소가 보이는 창에 추가해야합니다 (... 너무 스윙에서 작동하고 있는지 100 % 확인) AWT와 이것을 사용/프레임/구성 요소는 paintComponent이 호출됩니다.
GUI은 KeyListener로만 추가되지만 JFrame이나 위의 코드에서 보이는 다른 구성 요소에는 추가되지 않습니다. 구성 요소가 전혀 표시되지 않기 때문에 paintComponent에 전화 할 이유가 없습니다.

+0

도움을 주셔서 감사합니다. 알고 있어야합니다. 타이. – demon

0

"System.out.println ("paint ");" ?

Windows 기반 GUI 응용 프로그램은 콘솔에 쓸 수 없습니다. 모든 GUI 응용 프로그램이 검은 색 창을 열면 빨기 때문에 콘솔이 없습니다.

Windows 아래에는 두 개의 Java 인터프리터가 있습니다. "javaw.exe"는 GUI 응용 프로그램이며 System.out에 자동으로 버립니다. 그리고 "java.exe"는 console-app이며 콘솔에 쓸 수 있습니다. "java.exe를"사용하여 프로그램을 시작하려고

+0

나는 eclipse와 Run-> cmd를 사용하여 프로그램을 실행한다. 다른 프로그램의 paintComponent에서 System.out.print()를 실행하면 문제가 없습니다. – demon

2

은 문제의 수는 코드가 있습니다

  1. 귀하의 GUI 패널이 대신 팬의 추가되어서는 안된다 (프레임에 있지?)
  2. 문자열의는 언제든지 호출 할 수 있기 때문에,
  3. 페인트 대신
  4. 페인트가 구성 요소의 상태를 변경하지 마십시오 paintComponents의 오버라이드 (override) 할 필요가 NullPointerException이 발생하는, 초기화되지 않은 것입니다.
  5. 등 ...
+0

paintComponent()는 사용자 정의 페인팅을 재정의하는 적절한 방법입니다. 사용자 정의 페인팅에 대한 스윙 튜토리얼을 참조하십시오. http://adload.oracle.com/javase/tutorial/uiswing/painting/index.html – camickr

+0

camickr가 맞습니다. 포인트 3을 무시하십시오. –

-1

내가

Graphics g = _yourcomponent_.getGraphics(); 
if (g != null) { 
    _yourcomponent_.paint(g); 
    // below the estimated code for Swing: 
    _yourcomponent_.paintComponent(g); 
} 
+0

getGraphics() 메소드를 사용하여 그림 그리기. 커스텀 페인팅에 대한 튜토리얼에 대한 링크는 Maurice에 대한 제 의견을 참조하십시오. – camickr

+0

그래, 구성 요소를 다시 칠하기위한 공식적인 방법은 아니지만 (알고있는 한 알 수있는대로) ** 작업 ** 방식이며 충돌하지 않습니다. – elslooo

관련 문제