JLabel
의 맞춤 하위 클래스를 만들었습니다. 하나의 JPanel
안에 하나의 JFrame
안에 하나의 인스턴스가 있습니다. 나는 이 아니며은 paintComponent()
메서드를 대체합니다. 모든 클래스는 커서가 커서를 가리킬 때 배경색을 변경합니다.내 맞춤 Swing 라벨을 초기화하는 데 시간이 너무 오래 걸리는 이유는 무엇입니까?
JFrame
은 즉시로드되지만 몇 초 동안 JPanel
은 채워지지 않습니다. 나는 이것이 을 무시하고 디버그 println()
진술을 추가하여 사용자 정의 클래스 때문이라는 것을 확인했습니다.
public void paintComponent(Graphics context)
{
System.out.println("Painting...");
super.paintComponent(context);
System.out.println("Painted.");
}
이상한 것은 내가 Panel
대신 JPanel
또는 Label
대신 JLabel
를 사용하는 경우가 즉시 그려입니다.
이 지연은 어디에서 발생합니까?
편집 : 일부 예제 코드. 실제로 그려지는 것은 없습니다. 콘솔 메시지 지연을보십시오.
import javax.swing.JFrame;
import javax.swing.JLabel;
import java.awt.event.MouseListener;
import java.awt.event.MouseEvent;
import java.awt.GridLayout;
import javax.swing.JPanel;
public class Example extends JLabel implements MouseListener
{
private static final long serialVersionUID = 0;
public Example()
{
super();
System.out.println("Constructed.");
}
public void paintComponent(java.awt.Graphics g)
{
System.out.println("Painting component...");
super.paintComponent(g);
System.out.println("Painted.");
}
public void mouseEntered(MouseEvent event) { }
public void mouseExited(MouseEvent event) { }
public void mouseReleased(MouseEvent event) { }
public void mousePressed(MouseEvent event) { }
public void mouseClicked(MouseEvent event) { }
public static void main(final String[] arguments)
{
JPanel panel = new JPanel();
panel.setLayout(new GridLayout(1, 1));
panel.add(new Example());
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(panel);
frame.setVisible(true);
System.out.println("Set visible.");
}
}
컴파일 가능한 실행 파일 [SSCCE] (http://sscce.org)을 게시하지 않으면 추측이 우리 것보다 낫습니다. 그러나 SWAG가 아닌 도움과 도움이 필요하다면 [SSCCE] (http://sscce.org)를 작성하고 게시하는 것이 좋습니다. 당신은 노력을 후회하지 않을 것이며, 우리도 마찬가지입니다. –
@HovercraftFullOfEels 완료. – Maxpm
Swing GUI 객체는 [이벤트 발송 스레드] (http://download.oracle.com/javase/tutorial/uiswing/concurrency/initial.html)에서 _only_ 작성 및 조작해야합니다. – trashgod