수정 한 JPanel
클래스를 인스턴스화 할 때 생성자를 통해 파일을 전달합니다. 파일 (XML)이 읽히고 나중에 데이터가 paint
메소드에서 사용됩니다. 그러나 데이터를 구문 분석 한 직후에 repaint()
과 revalidate()
을 모두 호출하지만 내 GUI는 완전히 똑같습니다. JFrame
을 확장하는 메인 클래스와 JPanel
을 확장하는 패널 클래스에서이 메서드를 호출합니다. 내가 말한 것처럼 JFrame을 다시 칠하지 않는 이유는 무엇입니까?
내 JFileChooser
에서 XML 파일을 선택
drawPanel
클래스는 파일에 복용하고 분석 한 후
repaint
및
revalidate
를 호출의 다른 생성자 인스턴스화됩니다. 나는 당신의 시간을 절약하기 위해 대부분의 코드를 생략했다.
public class myCode extends JFrame {
public myCode() {
super("Roadway Simulator");
setSize(800, 600);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(null);
drawie = new drawPanel();
drawie.setSize(new Dimension(width - 200, height));
drawie.setMinimumSize(new Dimension(width - 200, height));
drawie.setMaximumSize(new Dimension(width - 200, height));
drawie.setLocation(0, 0);
add(drawie);
setVisible(true);
try{Thread.sleep(500);revalidate();repaint();}catch(InterruptedException eeee){}
}
public static void main(String[] args){new myCode();}
}
가 여기 내 drawPanel 클래스의 :
class drawPanel extends JPanel {
boolean drawRoad = false;
public drawPanel() {
super();
}
public drawPanel(Document doc){
super();
//the change in my paint method
drawRoad = true;
revalidate();
repaint();
}
public paint(Graphics g){
super.paint(g);
if(drawRoad){
g.setColor(Color.BLACK);
g.fillRect(0,0,600,600);
}
}
}
내 코드는 단지 더 많은 세부, 상기와 동일
다음은 메인 클래스 '코드입니다. 내 JFrame을 다시 칠하지 않는 이유는 무엇입니까? 여기
'널 (null)'레이아웃을 사용하지 않도록주의하면서 픽셀 완벽한 레이아웃은 현대적인 UI 디자인의 환상입니다. 구성 요소의 개별 크기에 영향을주는 요소가 너무 많습니다. 어느 요소도 제어 할 수없는 요소가 너무 많습니다. 스윙은 핵심 레이아웃 관리자와 함께 작동하도록 설계되었으므로 문제가 끝나지 않게하고 – MadProgrammer
을 수정하기 위해 더 많은 시간을 소비하게됩니다. [설정 | (최대 | 최소) Java Swing의 크기 메서드?] (http://stackoverflow.com/questions/7229226/should-i-avoid-the-use-of-setpreferredmaximumminimumize-methods-in-java-swi) -하지만 귀하의 경우에는 "null"레이아웃을 사용하면 아무 효과가 없습니다 ... – MadProgrammer