gpt4 book ai didi

java - 在另一个类(class)使用 jpanel? (菜鸟问题)

转载 作者:行者123 更新时间:2023-11-30 11:28:09 24 4
gpt4 key购买 nike

我有类(class):

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.Timer;


public class MyTimer extends JFrame {
static JButton quitButton;
static JButton quit_2Button;
public MyTimer() {

initUI();

}

public static void random(){
int x = (int)(Math.random() * 100 + 1);
int y = (int)(Math.random() * 150 + 1);
System.out.println(x);
System.out.println(y);
quitButton = new JButton("Press this to quit?");
quitButton.setBounds(x, y, 200, 20);
}
public void initUI() {
random();
JPanel panel = new JPanel();

getContentPane().add(panel);

panel.setLayout(null);
JButton quit_2Button = new JButton("Or maybe press this to quit!");
quit_2Button.setBounds(50, 100, 200, 20);
quit_2Button.setRolloverEnabled(true);
quit_2Button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent event) {
System.exit(0);
}
});
quitButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent event) {
finder.main(null);
}
});


panel.add(quitButton);
panel.add(quit_2Button);
setTitle("Java");
setSize(300, 200);
setLocationRelativeTo(null);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}

}

    import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.SwingUtilities;
import javax.swing.Timer;

public class timer_run {
ActionListener al = new ActionListener() {
public void actionPerformed(ActionEvent e) {
panel.remove(); //error here
}
};
public static void main(String[] args) {


SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
MyTimer ex = new MyTimer();
ex.setVisible(true);
new timer_run();

}

});

}
public timer_run() {
Timer timer = new Timer(1000, al);
timer.start();


}
}

我正在努力做到这一点,以便在激活 actionlistener al 时调用 jpanel.remove(quit_2Button)。问题是,每当我尝试这样做时,它都会给我错误“无法解析面板”。我假设发生这种情况的原因是因为 timer_run 无法访问 JPanel 框架,但通过各种试验和错误未能解决此问题。有人对我可以做什么让 timer_run 看到 JPanel 框架有任何建议吗?提前致谢,请注意我是 Java 菜鸟,所以请尽可能简单地回答问题?

最佳答案

建议:

  • 一个类不应尝试直接操作另一个类的变量。
  • 而是让一个类调用另一个类的公共(public)方法。
  • 要允许您的第二个类执行此操作,您需要将第一个类的对象的引用传递给第二个类的对象。我建议您通过构造函数参数执行此操作。

例如

// class name should begin with an upper case letter
public class TimerRun {
private MyTimer myTimer;


public TimerRun(MyTimer myTimer) {
this.myTimer = myTimer;
}

//....
}

现在 TimerRun 类可以通过调用 myTimer.someMethod()

调用 myTimer 持有的 MyTimer 对象的公共(public)方法

关于java - 在另一个类(class)使用 jpanel? (菜鸟问题),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18993000/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com