java - java gui方法/对象调用
问题描述
下面我有两个代码部分。第一个执行第二个我想要的操作。第一个代码编译并正常工作,第二个代码没有。我是 Java 新手,我认为我缺少有关如何调用另一个对象标签或微调器的基本知识。我想要一种方法来完成微调器状态更改中的所有事情。我对所有良好实践的实施持开放态度。我在 Eclipse 中使用窗口生成器。
package stackoverflowtestgui;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JSpinner;
import java.awt.BorderLayout;
import javax.swing.JLabel;
import javax.swing.event.ChangeListener;
import javax.swing.event.ChangeEvent;
import javax.swing.SpinnerNumberModel;
public class TestGUI {
private JFrame frame;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
TestGUI window = new TestGUI();
window.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the application.
*/
public TestGUI() {
initialize();
}
/**
* Initialize the contents of the frame.
*/
private void initialize() {
frame = new JFrame();
frame.setBounds(100, 100, 450, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(null);
JLabel lblTotal = new JLabel("total: "+total);
lblTotal.setBounds(31, 38, 101, 14);
frame.getContentPane().add(lblTotal);
JSpinner spinner_2 = new JSpinner();
JSpinner spinner_1 = new JSpinner();
spinner_2.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent e) {
num1 = (double) spinner_1.getValue();
num2 = (double) spinner_2.getValue();
total = num1+num2;
lblTotal.setText("total: "+total);
}
});
spinner_2.setModel(new SpinnerNumberModel(new Double(0), null, null, new Double(1)));
spinner_2.setBounds(31, 73, 30, 20);
frame.getContentPane().add(spinner_2);
spinner_1.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent e) {
num1 = (double) spinner_1.getValue();
num2 = (double) spinner_2.getValue();
total = num1+num2;
lblTotal.setText("total: "+total);
}
});
spinner_1.setModel(new SpinnerNumberModel(new Double(0), null, null, new Double(1)));
spinner_1.setBounds(31, 104, 30, 20);
frame.getContentPane().add(spinner_1);
}
public double num1=0;
public double num2=0;
public double total=0;
}
这是我如何编写代码来做我想做的事情的一个例子:)
package stackoverflowtestgui;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JSpinner;
import java.awt.BorderLayout;
import javax.swing.JLabel;
import javax.swing.event.ChangeListener;
import javax.swing.event.ChangeEvent;
import javax.swing.SpinnerNumberModel;
public class TestGUI {
private JFrame frame;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
TestGUI window = new TestGUI();
window.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the application.
*/
public TestGUI() {
initialize();
}
/**
* Initialize the contents of the frame.
*/
private void initialize() {
frame = new JFrame();
frame.setBounds(100, 100, 450, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(null);
lblTotal.setBounds(31, 38, 101, 14);
frame.getContentPane().add(lblTotal);
spinner_2.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent e) {
newmethod();
}
});
spinner_2.setModel(new SpinnerNumberModel(new Double(0), null, null, new Double(1)));
spinner_2.setBounds(31, 73, 72, 20);
frame.getContentPane().add(spinner_2);
spinner_1.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent e) {
newmethod();
}
});
spinner_1.setModel(new SpinnerNumberModel(new Double(0), null, null, new Double(1)));
spinner_1.setBounds(31, 104, 72, 20);
frame.getContentPane().add(spinner_1);
}
protected void newmethod() {
// TODO Auto-generated method stub
num1 = (double) spinner_1.getValue();
num2 = (double) spinner_2.getValue();
total = num1+num2;
lblTotal.setText("total: "+total);
}
public double num1=0;
public double num2=0;
public double total=0;
public JSpinner spinner_2 = new JSpinner();
public JSpinner spinner_1 = new JSpinner();
public JLabel lblTotal = new JLabel("total: ");
}
解决方案
您已在 initialize() 方法中将变量 spinner_1、spinner_2 和 lblTotal 声明为局部变量,因此它们在该方法之外不可见。它们应该是类的私有实例变量。
推荐阅读
- reactjs - oidc-client jest.mock() 不允许引用任何超出范围的变量
- python - 如何在 Python 中捕获指定的错误“[Errno 28] 设备上没有剩余空间”
- python - schedule (Python lib) - 如何在多个特定的小时内运行作业
- google-app-engine - 如何在 Google App Engine 中将 .com.sg 重定向到 .sg?
- javascript - 使用 React 获取 div 的特定滚动位置
- angular - 加载整个页面并绑定和渲染数据时的Angular 7生命周期
- python - 从其他脚本重新启动 python 脚本
- regex - Ruby 条件正则表达式标记错误:无效的条件模式 (SyntaxError)
- javascript - 谷歌浏览器不会在某些网站上应用自建扩展注入的代码,直到滚轮转动
- angular - 等待点击 Promise 完成的 Angular 指令