Я пытаюсь научиться пользоваться библиотекой графического интерфейса пользователя JAVA Swing.То, что я пытаюсь сделать, это поместить 2 изображения дисков в ряд и 3 изображения принтеров в ряд под ними.Каждый образ диска должен находиться в середине двух изображений принтера.Я (к сожалению) использую GridBagLayout
для достижения этой цели.Я пытаюсь построить сетку из 12 столбцов, чтобы каждый принтер занимал 4 и каждый диск 6. Затем я попытался установить привязки объектов на GridBagConstraints.PAGE_END
, чтобы изображения находились в нижней средней части ячейки.Независимо от того, что я делаю, я не могу правильно настроить диски, я потратил огромное количество времени, пытаясь это исправить.
Вот моя функция, которая создает объекты:
private void placeIcon(Container pane, GridBagConstraints c, int x, int y, String imagePath,
String imageLabel, int gridWidth) {
BufferedImage printerIcon;
try {
printerIcon = ImageIO.read(new File(imagePath));
} catch (IOException e) {
e.printStackTrace();
return;
}
JLabel textLabel = new JLabel(imageLabel + Integer.toString(x + 1),
SwingConstants.CENTER);
JPanel iconPanel = new JPanel();
iconPanel.setLayout(new GridBagLayout());
textLabel.setPreferredSize(new Dimension(100,10));
GridBagConstraints iconConstr = new GridBagConstraints();
iconConstr.gridx = 0;
iconConstr.gridy = 0;
iconConstr.insets = new Insets(10, 3, 1, 3);
iconConstr.anchor = GridBagConstraints.PAGE_END;
iconConstr.weightx = 1;
iconConstr.weighty = 1;
iconPanel.add(textLabel, iconConstr);
JLabel iconLabel = new JLabel(new ImageIcon(printerIcon));
iconLabel.setPreferredSize(new Dimension(250,250));
iconConstr.gridx = 0;
iconConstr.gridy = 1;
iconConstr.insets = new Insets(1, 3, 1, 3);
iconConstr.anchor = GridBagConstraints.PAGE_END;
iconConstr.weightx = 1;
iconConstr.weighty = 1;
iconPanel.add(iconLabel, iconConstr);
c.gridx = x;
c.gridy = y;
c.weightx = 1;
c.weighty = 1;
c.anchor = GridBagConstraints.PAGE_END;
c.gridwidth = gridWidth;
c.insets = new Insets(25, 10, 1, 10);
pane.add(iconPanel, c);
}
Вызывая это так, чтобы создать образы принтера и диска:
private void placeAllPrinterIcons(Container pane, GridBagConstraints c, int yPos) {
String imgPath = "bin/images/printer_icon.png";
String label = "Printer ";
placeIcon(pane, c, 0, yPos, imgPath, label, 4);
placeIcon(pane, c, 4, yPos, imgPath, label, 4);
placeIcon(pane, c, 8, yPos, imgPath, label, 4);
}
private void placeAllDiskIcons(Container pane, GridBagConstraints c, int yPos) {
String imgPath = "bin/images/disk_icon.png";
String label = "Disk ";
placeIcon(pane, c, 0, yPos, imgPath, label, 6);
placeIcon(pane, c, 6, yPos, imgPath, label, 6);
}
Container pane = getContentPane();
pane.setLayout(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
c.fill = GridBagConstraints.HORIZONTAL;
placeAllDiskIcons(pane, c, 0);
placeAllPrinterIcons(pane, c, 1);
Текущий графический интерфейс выглядит такэто, метки должны быть исправлены: ![First disk not aligned properly](https://i.stack.imgur.com/LCl8I.png)