我刚刚开始使用Java,而且之前只使用过PHP - 很难找到面向对象的东西。我正在使用Eclipse IDE。
我正在尝试制作一个程序,告诉你在另一个星球上的重量 - 看起来很简单
到目前为止,我所做的只是在Swing中创建了一半界面(这就是所谓的?)
有时我会运行它,它会像我期望的那样出现,标题,文本框等...... 其他时候(当绝对没有做出任何改变时),它只会出现一个空白屏幕
图像显示工作时的样子。当它不工作时,就没有任何物体。它的工作时间约占20%。
我认为这可能是因为我的下拉菜单 - 或JComboBox,这已经让人头疼 - Eclipse让我添加了“< Object>”在每次提到JComboBox之后 - 它说“JComboBox是原始类型。对泛型JComboBox的引用应该参数化”
我不知道为什么会这样,而且我可能只是真的很厚,抱歉,如果这是一个愚蠢的问题,但我怎么能解决这个问题,我的代码出了什么问题呢?
package calc;
import javax.swing.*;
import java.awt.*;
public class View extends JFrame {
static String titleText = "Calculate your Mass on another Plannet";
public View(){
super(titleText);
setSize(500,400);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
FlowLayout flo = new FlowLayout();
setLayout(flo);
JPanel inputData = new JPanel();
//Labels
JLabel lblTitle = new JLabel (titleText, JLabel.CENTER);
lblTitle.setFont(new Font("Arial", Font.BOLD, 24));
JLabel lblInputMass = new JLabel ("Weight", JLabel.LEFT);
JLabel lblInputUnits = new JLabel("Units");
//Input Boxes and Lists
JTextField txtInputMass = new JTextField(5);
JComboBox<Object> comInputUnits;
String arrUnits[] = {"Kilos", "Stone", "Pounds"};
comInputUnits = new JComboBox<Object>(arrUnits);
comInputUnits.setSelectedIndex(1);
//Buttons
JButton btnCalculate = new JButton("Calculate");
//Append objects
add(lblTitle);
inputData.add(lblInputMass);
inputData.add(txtInputMass);
inputData.add(lblInputUnits);
inputData.add(comInputUnits);
inputData.add(btnCalculate);
add(inputData);
}
/**
* @param args
*/
public static void main(String[] args) {
View sal = new View();
}
}
对不起,这是一个很长的问题,我会非常感谢任何建议或答案, 正如我所说,我知道关于Java的大麦,我刚开始 - 谢谢你:)
答案 0 :(得分:8)
你应该
setVisible(true)
; “Eclipse让你添加”的<Object>
称为泛型类型。阅读tutorial on generics。
答案 1 :(得分:3)
你需要在EventDispatchThread(EDT)中处理Swing组件的所有事情。
在致电new View()
SwingUtilities.invokeAndWait()
答案 2 :(得分:2)
始终致电pack()
。此版本可靠地运行(至少显示)。
import javax.swing.*;
import java.awt.*;
public class View extends JFrame {
static String titleText = "Calculate your Weight on another Planet";
public View(){
super(titleText);
// not now!
//setSize(500,400);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//setVisible(true);
FlowLayout flo = new FlowLayout();
setLayout(flo);
JPanel inputData = new JPanel();
//Labels
JLabel lblTitle = new JLabel (titleText, JLabel.CENTER);
lblTitle.setFont(new Font("Arial", Font.BOLD, 24));
JLabel lblInputMass = new JLabel ("Weight", JLabel.LEFT);
JLabel lblInputUnits = new JLabel("Units");
//Input Boxes and Lists
JTextField txtInputMass = new JTextField(5);
JComboBox comInputUnits;
String arrUnits[] = {"Kilos", "Stone", "Pounds"};
comInputUnits = new JComboBox(arrUnits);
comInputUnits.setSelectedIndex(1);
//Buttons
JButton btnCalculate = new JButton("Calculate");
//Append objects
add(lblTitle);
inputData.add(lblInputMass);
inputData.add(txtInputMass);
inputData.add(lblInputUnits);
inputData.add(comInputUnits);
inputData.add(btnCalculate);
add(inputData);
// force the container to layout the components. VERY IMPORTANT!
pack();
setSize(500,400);
setVisible(true);
}
public static void main(String[] args) {
// This is what JB Nizet was alluding to..
// 'start (or update) the GUI on the EDT'
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new View();
}
});
}
}
答案 3 :(得分:-1)
试试这个:
public static void main(String[] args) {
View sal = new View();
sal.setSize(500, 400);
sal.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
sal.setVisible(true);
}
在构造函数之后注释这些行:
super(titleText);
setSize(500,400);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
希望有所帮助。