我在下面的示例代码中继承了JFrame,因此我的add()
方法继承自容器(JPanel
)。我想知道以下内容:
为什么我们为以下方法调用实例:
fc.setSize(280,125); // width and height
fc.setResizable(false);
fc.setLocationRelativeTo(null);
fc.setVisible(true);
我们继承了所有这些方法,所以我天真地尝试在不创建对象的情况下调用它们并将它们用作实例,但我获得了一些错误,抱怨非静态方法被引用为静态上下文。我在构造函数的末尾添加了它们,我没有收到任何问题。在这种情况下,我还想知道如果调用实例而不是直接调用方法有什么好处。它不像我们有多个框架所以我没有看到使用创建对象。
代码:
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
public class FC2 extends JFrame {
JTextField ftext, ctext;
JButton f2c, c2f;
public FC2(String title) {
super(title);
JLabel f = new JLabel("Fahrenheit");
JLabel c = new JLabel("Celsius");
ftext = new JTextField(5);
ctext = new JTextField(5);
f2c = new JButton(">>>");
c2f = new JButton("<<<");
setLayout(new FlowLayout(FlowLayout.LEFT,10,10));
add(f);
add(f2c);
add(c);
add(ftext);
add(c2f);
add(ctext);
ActionListener bl = new ButtonListener(this);
// anonymous class for ActionListener parameter
f2c.addActionListener(bl);
c2f.addActionListener(bl);
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
JFrame fc = new FC2("F2C Converter");
fc.setSize(280,125); // width and height
fc.setResizable(false);
fc.setLocationRelativeTo(null);
fc.setVisible(true);
}
}
class ButtonListener implements ActionListener {
FC2 frame;
public ButtonListener(FC2 frame) {
this.frame = frame;
}
public void actionPerformed(ActionEvent e) {
// get at button label
String label = e.getActionCommand();
if (label.equals("<<<")) { // c2f
String cstr = frame.ctext.getText();
float c = Float.parseFloat(cstr);
float f = c*9/5+32;
String fstr = String.format("%4.1f", f);
frame.ftext.setText(fstr);
} else {
String fstr = frame.ftext.getText();
float f = Float.parseFloat(fstr);
float c = (float)((f-32)*5/9.0);
String cstr = String.format("%4.1f", c);
frame.ctext.setText(cstr);
}
}
}
答案 0 :(得分:4)
您应该了解static
和非static
方法的差异 - 您继承的方法仅在非static
上下文中有效,而main
- 方法在static
上下文中。不要混淆这两件事!