【发布时间】:2014-10-28 22:38:39
【问题描述】:
我需要做的是在我关闭 JFrame 时设置一个变量。我的项目中有一个线程。我希望这个线程只有在另一个类中的静态变量设置为 true 时才运行。 这是我将在其中设置变量 (sliderActivated) 的类:
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Toolkit;
import javax.swing.JFrame;
import javax.swing.JSlider;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
public class ZoomSlider extends JFrame implements ChangeListener{
private static final long serialVersionUID = -9026587156796382276L;
private JSlider slider;
private static boolean sliderActivated = false;
public ZoomSlider(){
//setSliderActivated(true);
Container contentPane = getContentPane();
this.setTitle("Zoom");
this.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
this.setAlwaysOnTop(true);
Toolkit mioToolkit = Toolkit.getDefaultToolkit();
Dimension dimensioniSchermo = mioToolkit.getScreenSize();
int larghezzaFrame, altezzaFrame;
larghezzaFrame = 80;
altezzaFrame = (int)(dimensioniSchermo.getHeight() - 70);
this.setSize(larghezzaFrame, altezzaFrame);
this.setLocation(0,50);
slider = new JSlider(JSlider.VERTICAL, 50, 200, 100);
slider.setMajorTickSpacing(50);
slider.setMinorTickSpacing(10);
slider.setPaintTicks(true);
slider.setPaintLabels(true);
slider.addChangeListener(this);
contentPane.add(slider);
this.setVisible(true);
}
@Override
public void stateChanged(ChangeEvent arg0) {
//setSliderActivated(true);
int value = ((JSlider)arg0.getSource()).getValue();
EarthPanel.SCALE = value/100.0;
//setSliderActivated(false);
}
public static boolean isSliderActivated() {
return sliderActivated;
}
public static void setSliderActivated(boolean sliderActivated) {
ZoomSlider.sliderActivated = sliderActivated;
}
}
这是使用变量的线程的运行方法:
public void run() {
while(true){
if(ZoomSlider.isSliderActivated()){
this.setPreferredSize(new Dimension((int)(width * SCALE),(int)(height * SCALE)));
repaint();
}
}
}
我的想法是仅在 JFrame ZoomSlider.java 可见时重新绘制主面板(此问题中不存在代码)。在那一刻,sliderActivated 将被设置为 true。相反,当我关闭 JFrame 时,sliderActivated 将设置为 false 并且线程将停止运行。 我该怎么做?
【问题讨论】:
-
你可以使用线程的
join()方法......
标签: java swing jframe repaint java-2d