Есть ли способ сделать это?
Что мне действительно нужно, так это UITextField, где я могу контролировать положение курсора. Но насколько я могу судить, это невозможно. Итак, я смотрю на использование UITextView. Это позволяет контролировать положение курсора. Но мне мешает прокрутка - мой текст прокручивается то тут, то там, а я этого не хочу. Я пробовал перебирать каждый компонент, чтобы проверить видимость с помощью isVisible (), но кажется, что все они «видимы». Редактировать: По "верхней карте" ...
Можно ли получить верхнюю карту в Java CardLayout? Я пробовал перебирать каждый компонент, чтобы проверить видимость с помощью isVisible (), но кажется, что все они «видимы».
Редактировать: Под «верхней карточкой» я подразумеваю ту, которая в настоящее время находится «наверху», отображаются, а не первая или последняя карта. Кроме того, я не знаю, помогает ли это, но я ищу JPanel (или его подкласс)
Изменить: фрагмент кода
for (Component component : getComponents()) {
if (component instanceof JPanel && component.isVisible()) {
currentPanel = (JPanel) component;
System.out.println(currentPanel.getClass().getName());
}
}
Приведенный выше код всегда распечатывает имя каждого класса компонента, независимо от того, являются ли они видимая карта или нет.
Редактировать : Я использую это как часть школьного задания. Я не пытаюсь получить здесь халяву, задание не вращается вокруг этого макета. Это просто кажется наиболее удобным макетом для переключения между панелями. Мой учитель указал, что в проекте не должно быть стороннего кода. Я' я видел реализацию из ссылки camickr раньше, но я не могу ее использовать. Я могу свободно реализовать аналогичные функции и, возможно, дать ссылку на нее в документации, но я не могу просто загрузить и использовать ее.
Изменить : Причина, по которой я пытаюсь получить верхнюю карту, заключается в том, что у меня панель инструментов с кнопкой «Добавить». Вместо того чтобы иметь по одной кнопке добавления для каждой из двух возможных вещей, я хотел, чтобы она знала, что добавить, просто глядя на то, какая панель просматривается в данный момент. Если есть другой, более подходящий способ сделать это, дайте мне знать.
Edit : Спасибо всем за помощь. Я понял, в чем проблема. Думаю, это была моя вина, поскольку я не предоставил достаточно подробностей. Две из моих карточек - это JScrollPane
, и мне также нужно было просмотреть их содержимое, чтобы узнать, была ли одна из этих панелей той, которую я видел. Я не проверял isVisible ()
на самой панели прокрутки, я смотрел на его утверждения, которые всегда видны, это была панель прокрутки, видимость которой мне нужно было проверить.
public JPanel getCurrentPanel() {
JPanel currentPanel = null;
for (Component component : getComponents()) {
if (component.isVisible()) {
if (component instanceof JPanel)
currentPanel = (JPanel) component;
else if (component instanceof JScrollPane)
currentPanel = (JPanel) ((JScrollPane) component).getViewport().getComponent(0);
}
}
return currentPanel;
}