Hi, bei Knopfdruck ändere ich die preferredSize von ein paar Panels, die in meinem Frame liegen. Ich kriege es aber einfach nicht hin dass man die Änderung sofort sieht. Es passiert nämlich zunächst nix, und erst wenn ich die Inhalte verändere passt sich auch die Größe an. Ich hab nun schon alle möglichen Variationen von pack(), validate(), revalidate(), repaint() probiert... Bisher ohne Erfolg. Wer kann helfen?
Ich hab hier ein KSKB gemacht, die Stelle mit dem Problem befindet sich im ItemListener der "boxSize".
Vielen Dank
Ich hab hier ein KSKB gemacht, die Stelle mit dem Problem befindet sich im ItemListener der "boxSize".
Vielen Dank
Java:
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.FlowLayout;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.util.ArrayList;
import java.util.List;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.BevelBorder;
public class KSKB extends JFrame {
class MyPanel extends JPanel {
public MyPanel() {
setPreferredSize(new Dimension(6 * 50, 12 * 50));
setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED));
}
}
public static void main(String[] args) {
final KSKB window = new KSKB();
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
window.setVisible(true);
}
});
}
private List<JPanel> panels = new ArrayList<JPanel>();
private JPanel dynamicContent = new JPanel(new FlowLayout());
public KSKB() {
setResizable(false);
setDefaultCloseOperation(EXIT_ON_CLOSE);
panels.add(new MyPanel());
panels.add(new MyPanel());
final JComboBox boxPlayers = new JComboBox(new Object[] { 2, 3, 4, 5 });
boxPlayers.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
int wishNum = (Integer) boxPlayers.getSelectedItem();
while (panels.size() > wishNum) {
panels.remove(panels.size() - 1);
}
while (panels.size() < wishNum) {
panels.add(new MyPanel());
}
rebuildDynamicContent();
}
});
final JComboBox boxSize = new JComboBox(new Object[] { 20, 30, 40, 50 });
boxSize.setSelectedItem(50);
boxPlayers.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
int size = (Integer) boxSize.getSelectedItem();
Dimension d = new Dimension(size * 6, size * 12);
for (JPanel p : panels) {
p.setPreferredSize(d);
}
pack();
}
});
// add components
JPanel btnPanel = new JPanel(new FlowLayout());
btnPanel.add(boxSize);
btnPanel.add(boxPlayers);
setLayout(new BorderLayout());
add(btnPanel, BorderLayout.NORTH);
add(dynamicContent, BorderLayout.CENTER);
// initialize content
rebuildDynamicContent();
}
private void rebuildDynamicContent() {
dynamicContent.removeAll();
for (final JPanel p : panels) {
JPanel pPanel = new JPanel(new BorderLayout());
JPanel btnPanel = new JPanel(new FlowLayout());
JButton keySettings = new JButton("Key Settings");
btnPanel.add(keySettings);
pPanel.add(btnPanel, BorderLayout.SOUTH);
pPanel.add(p, BorderLayout.CENTER);
dynamicContent.add(pPanel);
}
pack();
setLocationRelativeTo(null);
}
}