Я должен признать, что, возможно, этот вопрос кажется странным, как написано, но я объясню здесь:Java не может сосредоточиться на JTextField внутри JPanel внутри JPanel в окне просмотра в JScrollPane
У меня есть JScrollPane, в котором я правильно добавлю JPanel, скажем, что на данный момент переменная JScrollPane - это «JSP», а JPanel - «JP»
В моем JP у меня есть ArrayList JPanel (назовем его AJP), который я могу контролировать видимость от вне JSP, я могу контролировать эту видимость, нажимая разные кнопки, каждая кнопка «связана» с номером, поэтому, если я нажму кнопку button1, первый элемент AJP получит видимость, установленную в true, а все остальные будут установлены в false.
Каждый из этих элементов AJP имеет различные элементы внутри, поэтому, например, AJP в первом положении имеет два JTextFields и 1 JButton, AJP в позиции 2 имеет только 1 JTextField.
Дело в том, что, кажется, что я не могу нажать JButton или отредактировать JTextField, как мышь не может сфокусировать их, я выложу здесь код
Это класс, который содержит JP и это расширение JScrollPane
private int x, y, width, height;
private JPanel internalPanel = new JPanel();
private ArrayList<KPanel> kPanels = new ArrayList<KPanel>();
JViewport viewport = new JViewport();
public KScrollPanel(int x, int y, int width, int height) {
this.x = x;
this.y = y;
this.width = width;
this.height = height;
this.internalPanel.setBorder(new LineBorder(Color.black, 1));
this.internalPanel.setSize(new Dimension(this.width - 10, this.height - 10));
this.internalPanel.setPreferredSize(new Dimension(this.width - 10, this.height - 10));
this.setSize(new Dimension(this.internalPanel.getWidth() + 10, this.internalPanel.getHeight() + 10));
this.setPreferredSize(this.internalPanel.getSize());
this.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
this.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
viewport.add(this.internalPanel);
}
Это другой класс, который Pratically состоит в ArrayList в классе KScrollPanel я просто отвечал, как вы можете видеть, метод инициализации добавляет динамически элементы (KButton и KTextFields являются два классы extendind JButton и JTextField)
Этот класс, конечно, является продолжением JPanel
private int x, y, width, height;
KTextField textfield_nodeName, textfield_relationshipName;
KButton button_saveNode, button_saveRelationship;
public KPanel(int x, int y, int width, int height) {
this.x = x;
this.y = y;
this.width = width;
this.height = height;
initGUI();
}
public KPanel() {
}
public void initGUI() {
this.setBounds(this.x, this.y, this.width, this.height);
this.setBorder(new LineBorder(Color.gray, 1));
}
public void initialize(String type) {
switch(type) {
case "Node":
textfield_nodeName = new KTextField(5, 5, 200, 30);
this.add(textfield_nodeName);
button_saveNode = new KButton(5, 35, 200, 30, "Save Node");
this.add(button_saveNode);
break;
case "Relationship":
textfield_relationshipName = new KTextField(5, 5, 250, 30);
this.add(textfield_relationshipName);
break;
}
this.revalidate();
this.repaint();
}
Я забыл добавить его в код, я добавить в иллюминатор к JScrollPane, а на самом деле, я вижу все предметы, все это произведения , Я расширяю компоненты, потому что хочу добавить больше функциональности, единственное, что не работает, - это тот факт, что я не могу сфокусироваться на своих кнопках или текстовых полях. –
«Я хочу добавить дополнительные функции», - что функциональность вы добавляете в панель прокрутки ??? Установка свойства не добавляет функциональности. 'Я забыл добавить его в код,' Опубликуйте правильный [SSCCE] (http://sscce.org/), который демонстрирует проблему. Сначала создайте SSCCE с помощью компонентов Swing.Затем, когда это работает, попробуйте создать пользовательский компонент. Затем, когда он перестает работать, вы знаете, что проблема заключается в вашем пользовательском компоненте. – camickr
Хорошо, я обнаружил, что проблема связана с настройками элементов из-за макета, я сделал то, как вы посоветовали создать рабочий пример, и теперь все работает, спасибо –