У меня есть пользовательский JPanel, который метод paintComponent переопределяется для рисования изображения.Пустые рамки на JPanel в BoxLayout.X_AXIS
Я хочу вставить несколько из этих настраиваемых панелей, вертикально центрированных в контейнере. Для этого я создал jpanel с BoxLayout.X_AXIS в качестве менеджера макетов.
Это прекрасно работает и показывает, что я хочу, но я хотел бы добавить поля между пользовательскими панелями.
EmptyMargins просто игнорируются, и сложная часть состоит в том, что я не могу (или не хотел бы ...) добавлять стойки или ящики между ними, потому что мне нужно получить каждую настраиваемую панель из цикла, который принимает все компоненты контейнера и отбросить их в CustomPanel.
Уточнить проблему? Если я добавлю стойки между панелями, будет исключение литья, а EmptyBorders не будут работать ... Любые идеи приветствуются!
Примечание: Я открыт для других предложений менеджера макетов! ;-)
Вот код:
public class StackExemple {
public StackExemple() {
JFrame frame = new JFrame();
frame.setPreferredSize(new Dimension(600, 300));
JPanel container = new JPanel();
container.setPreferredSize(new Dimension(600, 300));
container.setLayout(new BoxLayout(container, BoxLayout.X_AXIS));
CustomPanel customPanel1 = new CustomPanel();
CustomPanel customPanel2 = new CustomPanel();
CustomPanel customPanel3 = new CustomPanel();
container.add(customPanel1);
container.add(customPanel2);
container.add(customPanel3);
frame.getContentPane().add(container);
frame.pack();
frame.setVisible(true);
//Loop which takes the custompanels
for(Component comp : container.getComponents()) {
CustomPanel panel = (CustomPanel)comp;
//DO SOMETHING
System.out.println("Hello World");
}
}
private class CustomPanel extends JPanel{
private BufferedImage image;
public CustomPanel() {
setPreferredSize(new Dimension(100, 100));
setMinimumSize(getPreferredSize());
setMaximumSize(getPreferredSize());
setBorder(BorderFactory.createEmptyBorder(0,50,0,0));
setBackground(Color.RED);
// try {
// image = ImageIO.read(ClassLoader.getSystemClassLoader().getResource("Ressources/img.png"));
// } catch (IOException ex) {
// System.out.println("Ooops... ");
// }
}
@Override
protected void paintComponent(Graphics g)
{
super.paintComponent(g);
// int x = (this.getWidth() - image.getWidth())/2;
// int y = (this.getHeight() - image.getHeight())/2;
// g.drawImage(image, x, y, null);
}
}
}
+1 для [sscce] (http://sscce.org/); есть соответствующий пример [здесь] (http://stackoverflow.com/a/15104660/230513) – trashgod
Не думал об изменении максимального размера, но это работает отлично! Большое спасибо ! :-) –