我想動態更改面板,並且正如answer所示,他們建議使用cardLayout。但我想改變整個UI(沒有舊的按鈕),cardLayout似乎不太方便。所以,我有以下代碼:Java:爲什麼驗證不起作用
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有一個按鈕來改變面板:在MyDrawPanel1一些代碼:
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);
}
編輯。
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和阿達什訥辛格爾提供兩個解決問題的方法。第一個是面板不調用super.paintComponent()的第二個,所以添加它然後它工作正常(因爲這answer說,它是橡皮擦,所以第一個面板不見了)。第二個是調用frame.repaint(),但我不明白爲什麼?
嘗試'revalidate()',和CardLayout怎麼了? –
API有可能不認爲面板處於無效狀態。 – MadProgrammer
我認爲你需要的是invalidate(),而不是validate()。 –