如何允许另一个类修改另一个类的 JTextArea?
例如,假设我有 2 个类(class):
Panel.java
public class Panel extends JPanel
{
private JTextArea instructions;
public Panel()
{
instructions = new JTextArea(15,15);
add(instructions);
}
}
MenuBar.java
public class MenuBar extends JMenuBar
{
private JMenuItem openMenuItem,;
public MenuBar()
{
JMenu fileMenu = new JMenu("File");
openMenuItem = new JMenuItem("Open");
fileMenu.add(openMenuItem);
add(fileMenu);
MenuListener listener = new MenuListener();
openMenuItem.addActionListener(listener);
}
private class MenuListener implements ActionListener
{
public void actionPerformed(ActionEvent event)
{
if( event.getSource() == openMenuItem )
{
// change value of JTextArea from Panel.java
}
}
}
}
如何修改 MenuBar.class 中的 JTextArea (Panel.java) 指令?
最佳答案
首先,MenuBar 的代码片段由于以下行中的逗号而无法编译:
private JMenuItem openMenuItem,;
现在你有了一个类属性指令,它是类Panel 中的一个JTextArea 对象。这是私有(private)的,因此只有类面板才能访问它,这很好。如果您想通过另一个类获取或设置该属性的值,您可以为其添加 getter/setter。
在面板中添加以下代码:
public void setInstructions(JTextArea instructions) {
this.instructions = instructions;
}
public JTextArea getInstructions() {
return instructions;
}
setInstructions 是您要查找的方法,您可以使用您作为参数传递的值来设置指令 TextArea。
请使用以下代码修改 MenuBar 中的私有(private)类以显示我的意思。
private class MenuListener implements ActionListener
{
public void actionPerformed(ActionEvent event)
{
if( event.getSource() == openMenuItem )
{
Panel panel = new Panel(); //I don't know where you get your panel data from so I create a new one
panel.setInstructions(new JTextArea("I'm a text area and I have instructions")); //set the JTextArea value
System.out.println(panel.getInstructions().getText()); //test print to show how you can get the JTextArea text
}
}
}
我还添加了测试打印来验证 setter 的工作原理。
关于java - 从另一个类更改 JTextArea 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41528518/