동적으로 패널을 변경하고이 answer처럼 표시하려면 cardLayout을 사용하는 것이 좋습니다. 하지만 전체 UI (왼쪽 단추가 남아 있지 않음)를 바꾸고 싶습니다. cardLayout이 그렇게 편리하지는 않습니다. MyDrawPanel1에 좀 더 코드 :Java : 유효성이 작동하지 않는 이유
public MyDrawPanel1(final JFrame frame) {
clickButton.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
frame.getContentPane().removeAll();
//frame.validate();
frame.getContentPane().add(new MyDrawPanel2());
((JPanel)frame.getContentPane()).revalidate();
}
});
this.add(clickButton);
}
편집 :
JFrame frame = new JFrame ("Key test");
MyDrawPanel1 dp1 = new MyDrawPanel1(frame);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible (true);
JPanel p = new JPanel();
p.setLayout(new BorderLayout());
p.add(dp1,BorderLayout.CENTER);
frame.getContentPane().add(p);
frame.pack();
frame.setVisible (true);
그리고 MyDrawPanel1에서
패널을 변경할 수있는 버튼이 : 그래서 나는 다음과 같은 코드가 있습니다.JButton clickButton = new JButton("click");
Image image = new ImageIcon("D:/0.jpg").getImage();
public void paintComponent (Graphics g) {
super.paintComponent(g);
g.drawImage(image, 3, 40, null);
}
public Dimension getPreferredSize() {
if (image != null) {
return new Dimension(image.getWidth(null), image.getHeight(null));
}
return super.getPreferredSize(); // default
}
하지만 첫 번째 패널은 사라지지 않으며 두 번째 패널을 볼 수 있도록 패널을 최소화해야합니다. 내 질문은 유효성 검사가 작동하지 않는 이유와 다른 대안이있는 이유입니다. 감사.
편집 :.
가 (후 클릭) :
편집 : madProgrammer 및 ADARSH Singhal이 두 가지를 제공 여기에 내가 패널에 대해 냈다 사진 (첫번째 패널)이다 문제를 해결하는 방법. 첫 번째 패널은 super.paintComponent()라고 부르지 않는 두 번째 패널입니다. 따라서이 패널을 추가하면 잘 작동합니다 (이 패널은 지우개이므로이 answer라고 말함). 두 번째 프레임을 호출합니다. repaint(),하지만 왜 이해가 안돼?
'revalidate()'을 시도해보십시오. CardLayout에는 어떤 문제가 있습니까? –
API가 패널을 무효화 상태로 간주하지 않았을 수 있습니다. – MadProgrammer
당신이 필요로하는 것은 validate()가 아니라 invalidate()입니다. –