Witam serdecznie.
Mam taki złośliwy kawałek kodu...
w którym niestey ustawianie nowego komponentu nie działa poprawnie...
Czy mógłby mi wyjaśnić dalczego? (Podobna sytuacja występuje w moim
docelowym projekcie - ten fragment napisałem dla testów.)
Z góry dzięki za wyjaśnienia.
package framex.jpanel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
public class Framex extends JFrame {
private static final long serialVersionUID = 1L;
JPanel CENTER;
public Framex() {
setSize(200, 200);
CENTER = new JPanel();
//System.out.println(CENTER.isOpaque());
//CENTER.setOpaque(!CENTER.isOpaque());
CENTER.add(new Panelex(this));
System.out.println(getContentPane().isOpaque());
setContentPane(CENTER); //!i1a
*getContentPane().add(CENTER); *!i1b
System.out.println(CENTER.isOpaque());
}
public void changePane(JPanel panel) {
//!i2a
CENTER.removeAll();
CENTER.add(panel);
CENTER.validate();
//!i2b
/*getContentPane().removeAll();
getContentPane().add(panel);
getContentPane().validate();*/
//!=>tylko kombinacja 1b i 2b jest ok
//a co jak nie mam dostępu do getContentPane()!???
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new Framex().setVisible(true);
}
});
}
}
class Panelex extends JPanel {
//Framex framex;
private static final long serialVersionUID = 1L;
public Panelex(final Framex framex) {
//this.framex = framex;
JButton button = new JButton("close me");
add(button);
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
framex.changePane(new PanelexNowy());
}
});
}
}
class PanelexNowy extends JPanel {
private static final long serialVersionUID = 1L;
public PanelexNowy() {
add( new JLabel("Super nowy") );
}
}