Задайте ограничения установки для JButton из массива панели - PullRequest
0 голосов
/ 14 октября 2019

Я создаю календарь и создаю отдельные JPanels для каждого дня. Все эти панели помещаются в ArrayList. Однако, когда я пытаюсь добавить ограничения в JButton, используя SpringLayout, кажется, что он просто не работает из-за вызова из ArrayList.

Я вызываю validate ();и repaint ();

Однако мне все еще не везет.

    private void addEvents(int currentMonth) {
    for (int i = 0; i < eventArrayList.size(); i++) {
        JButton eventButton = new JButton();
        eventButtonArray.add(eventButton);
        String[] eventListSplit = eventArrayList.get(i).split(", ");
        if (Integer.parseInt(eventListSplit[2]) == currentMonth && eventListSplit[4].equalsIgnoreCase(initialFrame.getInitialPanel().getRightPanel().getNorthPanel().getYear().getText())) {
            eventButton.setText(eventListSplit[0]);
            eventButton.setBackground(Color.decode("#FF9D00"));
            eventButton.setFocusPainted(false);
            eventButton.setFont(new Font("Times New Roman", Font.BOLD, screenSize.width / 100));
            initialFrame.getInitialPanel().getRightPanel().getCenterPanel().getDayPanelArray().get(Integer.parseInt(eventListSplit[3]) + dateHashMap.get(currentMonth - 1).get(0) - 2).add(eventButton);
            initialFrame.getInitialPanel().getRightPanel().getCenterPanel().getDayPanel().getLayout().putConstraint(SpringLayout.HORIZONTAL_CENTER, eventButton, 0, SpringLayout.HORIZONTAL_CENTER, (DayPanel)initialFrame.getInitialPanel().getRightPanel().getCenterPanel().getDayPanelArray().get(Integer.parseInt(eventListSplit[3]) + dateHashMap.get(currentMonth - 1).get(0) - 2));
            initialFrame.getInitialPanel().getRightPanel().getCenterPanel().getDayPanel().getLayout().putConstraint(SpringLayout.VERTICAL_CENTER, eventButton, 0, SpringLayout.VERTICAL_CENTER, initialFrame.getInitialPanel().getRightPanel().getCenterPanel().getDayPanelArray().get(Integer.parseInt(eventListSplit[3]) + dateHashMap.get(currentMonth - 1).get(0) - 2));
            eventButton.addActionListener((ActionEvent e) -> {
                try {
                    newEvent = new NewEvent(screenSize);
                } catch (ParseException ex) {
                    System.out.println(ex.getMessage());
                }

                for (int k = 0; k < eventArrayList.size(); k++) {
                    String[] eventListSplit2 = eventArrayList.get(k).split(", ");
                    if (eventButton.getText().equalsIgnoreCase(eventListSplit2[0])) {
                        newEvent.getNewEventInitialPanel().getEventName().setText(eventListSplit2[0]);
                        newEvent.getNewEventInitialPanel().getLocationBox().setText(eventListSplit2[1]);
                        newEvent.getNewEventInitialPanel().getStartDate().setText(eventListSplit2[2] + "/" + eventListSplit2[3] + "/" + eventListSplit2[4]);
                        newEvent.getNewEventInitialPanel().getStartTime().setText(eventListSplit2[5] + ":" + eventListSplit2[6] + ":" + eventListSplit2[7]);
                        newEvent.getNewEventInitialPanel().getEndDate().setText(eventListSplit2[8] + "/" + eventListSplit2[9] + "/" + eventListSplit2[10]);
                        newEvent.getNewEventInitialPanel().getEndTime().setText(eventListSplit2[11] + ":" + eventListSplit2[12] + ":" + eventListSplit2[13]);
                        if (eventListSplit2[14].equalsIgnoreCase("true")) {
                            newEvent.getNewEventInitialPanel().getAllDay().setSelected(true);
                        }
                        newEvent.getNewEventInitialPanel().getDescription().setText(eventListSplit2[15]);
                    }
                }

                newEvent.setSize(screenSize.height / 2, screenSize.width / 2);
                newEvent.setLocationRelativeTo(null);
                newEvent.setVisible(true);

                newEvent.getNewEventInitialPanel().getSave().addActionListener((ActionEvent e1) -> {
                    JOptionPane.showMessageDialog(newEvent.getNewEventInitialPanel(), "Option not yet supported!");
                });

                newEvent.getNewEventInitialPanel().getDelete().addActionListener((ActionEvent e1) -> {
                    JOptionPane.showMessageDialog(newEvent.getNewEventInitialPanel(), "Option not yet supported!");
                });
            });
        }
    }
    initialFrame.validate();
    initialFrame.repaint();
}    

Пока я тестировал, чтобы убедиться, что получаю правильную панель, мне все еще не повезло в перемещении JButton. Он должен быть центрирован на основе кода.

enter image description here

Спасибо за вашу помощь!

1 Ответ

0 голосов
/ 14 октября 2019

Согласно ссылкам Java SpringLayout (https://docs.oracle.com/javase/tutorial/uiswing/layout/spring.html)

Похоже, что может пропустить ограничения запад / восток и север / юг.

В отличие от многих менеджеров компоновки, SpringLayout не устанавливает автоматически местоположение компонентов, которыми он управляет. Если вы вручную кодируете графический интерфейс пользователя, который использует SpringLayout, не забудьте инициализировать расположение компонентов, ограничивая местоположения запад / восток и север / юг. в зависимости от используемых ограничений вам также может понадобиться явно установить размер контейнера.

Примеры того, как установить расположение запад / восток и север / юг в SpringDemo2.java и SpringDemo3.java(ссылка на эту страницу).

...