从另一个函数内部显示Java GUI标签
阅读代码中的注释从另一个函数内部显示Java GUI标签,java,user-interface,Java,User Interface,阅读代码中的注释 public GUI() { // make the GUI } private class theHandler implements ActionListener { public void actionPerformed(ActionEvent event) { // if they clicked a button then do main1 } } public static void main1(String strin
public GUI() {
// make the GUI
}
private class theHandler implements ActionListener {
public void actionPerformed(ActionEvent event) {
// if they clicked a button then do main1
}
}
public static void main1(String string) throws IOException {
// random code
add(labelThatIWantToShow); // I want to display the label I created in GUI()
}
--如果你不理解这些评论--
我想在创建GUI的外部显示一个标签。我知道有一个明显的答案,我就是想不出来
谢谢您的帮助。您必须为要添加标签的代码提供一些上下文,例如:
public static void main1(GUI gui, String string)
{
}
。。。否则,无法知道要将标签添加到哪个窗口
您可能会使用一个静态变量来保存“已创建的单个窗口”,但我建议不要这样做-全局状态使代码难以推理。您必须为要添加标签的代码提供一些上下文,例如:
public static void main1(GUI gui, String string)
{
}
。。。否则,无法知道要将标签添加到哪个窗口
您可能会使用静态变量来保存“已创建的单个窗口”,但我建议不要这样做-全局状态使代码难以推理。答案是从
main1
方法中删除static
限定符。当然,我假设add(labelThatIWantToShow)代码>不是实际代码;无论使用哪个GUI工具包,都必须使用正确的代码
另一种方法——如果你因为某种原因不能摆脱static
,那就按照Jon的建议去做,并把一个参数传递给main1
,答案就是从main1
方法中删除static
限定符。当然,我假设add(labelThatIWantToShow)代码>不是实际代码;无论使用哪个GUI工具包,都必须使用正确的代码
另一种方法——如果你因为某种原因不能摆脱静态的
,你可以按照Jon的建议,把一个参数传递给main1
,以便在你的组件(在你的例子中是GUI和“主代码”)之间取得联系,你可以利用被称为“发布/订阅”或。这样,您可以轻松地更改整个GUI,而无需更改主代码。您可以更好地封装代码的各个方面(向用户显示结果并进行计算),尤其能够解决当前的问题
简单示例代码:
import java.util.Observable;
import java.util.Observer;
public class GUIExample implements Observer {
private String state = "foo";
public GUIExample() {
System.out.println("GUI created");
}
@Override
public void update(Observable o, Object arg) {
this.state = "bar";
System.out.println("GUI updated: " + state);
}
}
您的主要代码是:
import java.util.Observable;
public class MainCode extends Observable {
// you could call doStuff() if some certain action was performed
public void doStuff() {
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
setChanged();
notifyObservers();
}
public static void main(String[] args) {
MainCode mc = new MainCode();
mc.addObserver(new GUIExample());
mc.doStuff();
}
}
为了在您的组件(在您的案例中是GUI和“主代码”)之间取得联系,您可以使用被称为“发布/订阅”或“发布/订阅”的思想。这样,您可以轻松地更改整个GUI,而无需更改主代码。您可以更好地封装代码的各个方面(向用户显示结果并进行计算),尤其能够解决当前的问题
简单示例代码:
import java.util.Observable;
import java.util.Observer;
public class GUIExample implements Observer {
private String state = "foo";
public GUIExample() {
System.out.println("GUI created");
}
@Override
public void update(Observable o, Object arg) {
this.state = "bar";
System.out.println("GUI updated: " + state);
}
}
您的主要代码是:
import java.util.Observable;
public class MainCode extends Observable {
// you could call doStuff() if some certain action was performed
public void doStuff() {
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
setChanged();
notifyObservers();
}
public static void main(String[] args) {
MainCode mc = new MainCode();
mc.addObserver(new GUIExample());
mc.doStuff();
}
}
谢谢,但是我不能删除静态限定符。谢谢,但是我不能删除静态限定符。