2014-01-13 5 views
0

Есть ли способ использовать компонент, созданный в основном классе (который расширяет JFrame) вне этого класса? Я использую Netbeans генератор, и я хочу: textArea.setText("") , но у меня нет доступа к этому TEXTAREA компоненте вне основного классаИспользование компонента вне основного класса

+1

Быстрый ответ, да. – csmckelvey

+0

Что такое второй класс? –

+0

ok: D как я могу это сделать? – mkkrolik

ответ

2

Обеспечить поглотитель, чтобы получить доступ к текстовой области:

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); 
    } 
    // ... 
} 
+1

Я по-прежнему считаю, что лучше, если класс 'Main' передал' JTextArea' в класс 'Other'; таким образом, легче контролировать, кто имеет доступ к текстовой области. – Justin

+0

Это хороший момент. Нам ничего не говорили о том, как и когда создается другой класс, поэтому я не хотел делать никаких предположений. –

+2

Вам следует избегать подвергать себя самой текстуре, поскольку она дает вызывающим абонентам прямой доступ к родительскому компоненту, позволяет вызывающим абонентам делать с ними что-то, что вам действительно не хочется, чтобы удалить его или все дочерние компоненты родительского компонента – MadProgrammer

-2

В главном классе убедитесь, что вы установили:

public static JTextArea textArea; 

, а затем вы могут:

MainClass.textArea.setText(""); 

Надеюсь, это поможет!

+0

Я не могу этого сделать, потому что я использую генератор netbeans, и я не могу изменять объекты компонента. – mkkrolik

+3

Static не отвечает ... – MadProgrammer

1

Передайте 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 для примера

+0

Nitpick: это предоставляет компоненту неправильное использование, включая доступ к родительскому компоненту, позволяя вызывающему абоненту делать неприятные вещи, чтобы сделать только текстовую область родительским компонентом. Хотя шаблон посетителя не является лучшей идеей, более контекст того, что пытается сделать ОП, поможет определить, подходит ли этот подход - ИМХО;) – MadProgrammer

3

Есть несколько способов делать это. Одним из них является наличие доступа общественности к объекту (не рекомендуется):

public JTextArea textArea; //when you declare the object 

Но я рекомендую предоставление способа в основном классе, таких как:

public void clearTextArea(){ 
    textArea.setText(""); 
} 

Это, как правило, лучше, потому что вы обеспечить минимальный доступ к компоненту; вы можете убедиться, что основным классом является класс, который обрабатывает компонент, и никто другой.

Или вы могли бы сделать конструктор в вашем MouseListener класса, который принимает текстовую область в качестве параметра:

private JTextArea textArea; 

public MyMouseListener(JTextArea toChangeOnAction){ 
    textArea = toChangeOnAction; 
} 

Этот способ гораздо проще, когда вы хотите использовать несколько методов из области текста, вместо того, для создания многих методов в основном классе.

+0

+1 для третьего варианта, но есть недостаток контекста. .. – MadProgrammer

+0

@MadProgrammer Вы имеете в виду контекст: «предоставить метод в основном классе»? – Justin

+0

Нет, извините, вопрос OP не имеет контекста, поэтому трудно понять, какое решение решило бы их проблему. – MadProgrammer

Смежные вопросы