Есть ли способ использовать компонент, созданный в основном классе (который расширяет JFrame
) вне этого класса? Я использую Netbeans генератор, и я хочу: textArea.setText("")
, но у меня нет доступа к этому TEXTAREA компоненте вне основного классаИспользование компонента вне основного класса
ответ
Обеспечить поглотитель, чтобы получить доступ к текстовой области:
import javax.swing.JFrame;
import javax.swing.JTextArea;
// ...
public class Main extends JFrame {
private JTextArea textArea;
private void createUI() {
// ...
textArea = new JTextArea();
// ...
}
public JTextArea getTextArea() {
return textArea;
}
}
public class Other {
// ...
public void update(Main main, String message) {
main.getTextArea().setText(message);
}
// ...
}
Я по-прежнему считаю, что лучше, если класс 'Main' передал' JTextArea' в класс 'Other'; таким образом, легче контролировать, кто имеет доступ к текстовой области. – Justin
Это хороший момент. Нам ничего не говорили о том, как и когда создается другой класс, поэтому я не хотел делать никаких предположений. –
Вам следует избегать подвергать себя самой текстуре, поскольку она дает вызывающим абонентам прямой доступ к родительскому компоненту, позволяет вызывающим абонентам делать с ними что-то, что вам действительно не хочется, чтобы удалить его или все дочерние компоненты родительского компонента – MadProgrammer
В главном классе убедитесь, что вы установили:
public static JTextArea textArea;
, а затем вы могут:
MainClass.textArea.setText("");
Надеюсь, это поможет!
Я не могу этого сделать, потому что я использую генератор netbeans, и я не могу изменять объекты компонента. – mkkrolik
Static не отвечает ... – MadProgrammer
Передайте JTextFeild
конструктору второго класса.
public class MainClass {
private JTextField textField = new JTextField();
private SecondClass secondClass;
public MainClass() {
secondClass = new SecondClass(textField);
}
}
public class SecondClass {
private JTextField textField;
public SecondClass(JTextField textField) {
this.textField = textField;
}
}
Теперь же текстовое поле из MainClass
можно использовать в SecondClass
, так как он передается по ссылке
Также см this answer для примера
Nitpick: это предоставляет компоненту неправильное использование, включая доступ к родительскому компоненту, позволяя вызывающему абоненту делать неприятные вещи, чтобы сделать только текстовую область родительским компонентом. Хотя шаблон посетителя не является лучшей идеей, более контекст того, что пытается сделать ОП, поможет определить, подходит ли этот подход - ИМХО;) – MadProgrammer
Есть несколько способов делать это. Одним из них является наличие доступа общественности к объекту (не рекомендуется):
public JTextArea textArea; //when you declare the object
Но я рекомендую предоставление способа в основном классе, таких как:
public void clearTextArea(){
textArea.setText("");
}
Это, как правило, лучше, потому что вы обеспечить минимальный доступ к компоненту; вы можете убедиться, что основным классом является класс, который обрабатывает компонент, и никто другой.
Или вы могли бы сделать конструктор в вашем MouseListener
класса, который принимает текстовую область в качестве параметра:
private JTextArea textArea;
public MyMouseListener(JTextArea toChangeOnAction){
textArea = toChangeOnAction;
}
Этот способ гораздо проще, когда вы хотите использовать несколько методов из области текста, вместо того, для создания многих методов в основном классе.
+1 для третьего варианта, но есть недостаток контекста. .. – MadProgrammer
@MadProgrammer Вы имеете в виду контекст: «предоставить метод в основном классе»? – Justin
Нет, извините, вопрос OP не имеет контекста, поэтому трудно понять, какое решение решило бы их проблему. – MadProgrammer
- 1. Использование refs вне компонента
- 2. React router render component вне основного компонента
- 3. Использование window.draw() вне основного SFML
- 4. Использование класса вне заголовка класса
- 5. Экземпляр класса Java вне основного метода
- 6. Использование объекта вне класса
- 7. Использование общего локатора служб вне основного проекта
- 8. Вызов функции компонента вне компонента
- 9. Компоненты вызова компонента вне компонента
- 10. Использование массива foreach вне класса внутри класса?
- 11. Расширение основного компонента Laravel
- 12. system.out.print вне основного метода?
- 13. Манипулировать массив вне основного
- 14. Возвращение массива вне основного
- 15. Обновление элементов вне компонента
- 16. Получить параметры вне компонента
- 17. Как скомпилировать зависимость одного класса в градиенте вне основного проекта
- 18. Можно ли вызвать метод робота вне «основного» класса роботов?
- 19. Использование метода класса React из отдельного компонента
- 20. Использование магических методов php вне класса
- 21. Использование self в python, вне класса
- 22. правильное использование компонента-компонента
- 23. Использование zend framework 2/3 компонента вне zf app
- 24. Функция вызова вне компонента vue
- 25. Использование maven вне Eclipse
- 26. Как установить значение составного компонента вне композитного компонента
- 27. response.js сделать элемент DOM доступным для основного основного компонента
- 28. Реакция: реквизит компонента компонента вне метода рендеринга без использования состояния
- 29. Как ссылаться на атрибуты компонента AngularDart вне области видимости компонента
- 30. Как получить свойства компонента из основного компонента в Angular2?
Быстрый ответ, да. – csmckelvey
Что такое второй класс? –
ok: D как я могу это сделать? – mkkrolik