我是java的新手,我正在尝试输出到主要课程之外的课程中的文本字段,我无法让它工作。
在我的主要内容中,我有:
public static void main(String[] args) {
GUI gu = new GUI ();
gu.display.append("hi");
}
在我的GUI课程中,我有:
import java.awt.*;
import javax.swing.*;
public class GUI extends JFrame{
public GUI(){
FlowLayout flo = new FlowLayout();
Container pane = getContentPane();
JTextArea display = new JTextArea (30, 90);
JButton button = new JButton("CLICK ME");
JLabel label = new JLabel("Dont Click Him!");
setTitle("Merchables!?");
setVisible(true);
setSize(1000,600);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pane.setLayout(flo);
pane.add(display);
pane.add(button);
pane.add(label);
}
}
答案 0 :(得分:0)
您需要显示类GUI的公共字段。
public class GUI extends JFrame{
public final JTextArea display;
public GUI(){
FlowLayout flo = new FlowLayout();
Container pane = getContentPane();
display = new JTextArea (30, 90);
JButton button = new JButton("CLICK ME");
JLabel label = new JLabel("Dont Click Him!");
setTitle("Merchables!?");
setVisible(true);
setSize(1000,600);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pane.setLayout(flo);
pane.add(display);
pane.add(button);
pane.add(label);
}
}
答案 1 :(得分:0)
我认为你得到的错误是因为变量'显示'是最近的花括号{}的范围的本地。
这意味着它只适用于:public GUI(){..// scope here}
您想要的是将显示变量移到方法之外,并使其可供其他方法访问。如下:
import java.awt.*;
import javax.swing.*;
public class GUI extends JFrame{
// Now display is publicly accessible outside the GUI class
public JTextArea display;
public GUI(){
FlowLayout flo = new FlowLayout();
Container pane = getContentPane();
display = = new JTextArea (30, 90);
JButton button = new JButton("CLICK ME");
JLabel label = new JLabel("Dont Click Him!");
setTitle("Merchables!?");
setVisible(true);
setSize(1000,600);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pane.setLayout(flo);
pane.add(display);
pane.add(button);
pane.add(label);
}
}
我建议您使用get和set方法查找封装。使用公共变量是不好的做法。应该使用私有变量,并且应该使用get / set方法来访问它们。
例如:
import java.awt.*;
import javax.swing.*;
public class GUI extends JFrame{
// Now display is private to the GUI class
private JTextArea display;
public GUI(){
FlowLayout flo = new FlowLayout();
Container pane = getContentPane();
display = = new JTextArea (30, 90);
JButton button = new JButton("CLICK ME");
JLabel label = new JLabel("Dont Click Him!");
setTitle("Merchables!?");
setVisible(true);
setSize(1000,600);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pane.setLayout(flo);
pane.add(display);
pane.add(button);
pane.add(label);
}
// Get accessor method for display variable
public JTextArea getDisplay() {
return display;
}
}
现在,在你的主要编辑显示中,你想要获得显示变量并附加文本:
public static void main(String[] args) {
GUI gu = new GUI ();
gu.getDisplay().append("hi");
}
最后,如果您对其他直接访问该对象的类感到困扰(根据MadProgrammer的评论),更好的方法可能是在GUI类中使用它:
// Method to access and append text to display variable without getting it
public void appendToDisplay(String text) {
display.append(text);
}
然后打电话给那个。这允许调用者仅将文本附加到显示变量,而不是他们喜欢的任何内容。您现在的主要方法如下:
public static void main(String[] args) {
GUI gu = new GUI ();
gu.appendToDisplay("hi");
}
答案 2 :(得分:0)
可以通过多种方式实现这一目标,母亲最简单的方法可能是提供其他课程可以访问JTextArea
的方法。
您需要解决的第一个问题是更改JTextArea
的引用上下文,因为它目前只能从GUI构造函数中的本地上下文访问
public class GUI extends JFrame{
public GUI(){
//.,,
JTextArea display = new JTextArea (30, 90);
这意味着只能在构造函数的上下文中访问显示。
您需要移动display
以便可以从类上下文中访问它,即将其设为类或实例字段...
public class GUI extends JFrame{
JTextArea display;
public GUI(){
//.,,
display = new JTextArea (30, 90);
下一个问题是决定如何允许访问display
。您可以创建类字段public
...
public class GUI extends JFrame{
public JTextArea display;
但这会将display
暴露给任何人。 GUI组件是具有多个属性和状态的复杂对象。以这种方式公开GUI组件将使您无法管理此对象的状态和属性,它还会使组件暴露于滥用状态,因为其他类可以突然执行他们喜欢/使用它的任何内容...这不是很合乎需要的。
更好的解决方案是限制对字段的访问,并通过使用类中的方法来提供管理功能......
public class GUI extends JFrame{
private JTextArea display; // Only accessible from this instance of GUI
//...
public void appendDisplay(String text) {
display.append(text);
}
public String getDisplayText() {
return display.getText();
}
这意味着您GUI
类现在可以控制对display
的访问,并确定其他类可以对其执行的操作...
查看Controlling Access to Members of a Class了解更多详情......