我知道这是非常简单的事情,但作为一个完整的Java新手,我很想念它,有人指出它会有无限的帮助。我盯着屏幕,移动了一切,但仍然没有。
截图: http://i.imgur.com/dwH60.png 这就是运行时出现的所有内容。
fullGUI.java:
import java.awt.BorderLayout;
import javax.swing.JFrame;
import javax.swing.JRadioButton;
import javax.swing.JTextArea;
public class fullGUI extends JFrame
{
JFrame frame = new JFrame(); //creates frame
public fullGUI() // constructor
{
//setLayout(new BorderLayout());
//add(new shipGrid(), BorderLayout.NORTH);
//add(new shipGrid(), BorderLayout.NORTH);
add(new JRadioButton("Horizontal"), BorderLayout.WEST);
add(new JRadioButton("Vertical"), BorderLayout.WEST);
add(new JTextArea("Instructions to player will go here"), BorderLayout.CENTER);
frame.setSize(400,600);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setTitle("Battleship!");
frame.pack(); //sets appropriate size for frame
frame.setVisible(true);
}
}
......被......打电话。
test.java
public class test
{
public static void main(String[] args)
{
new fullGUI();
}
}
答案 0 :(得分:2)
FullGUI
已经扩展JFrame
,因此无需在其中创建另一个JFrame
getContentPane.add()
以添加至JFrame
SwingUtilities.invokeLater
总体来说就像这样
import java.awt.BorderLayout;
import javax.swing.JFrame;
import javax.swing.JRadioButton;
import javax.swing.JTextArea;
public class FullGUI extends JFrame
{
public FullGUI() // constructor
{
getContentPane().add(new JRadioButton("Horizontal"), BorderLayout.WEST);
getContentPane().add(new JRadioButton("Vertical"), BorderLayout.WEST);
getContentPane().add(new JTextArea("Instructions to player will go here"), BorderLayout.CENTER);
setSize(400,600);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setTitle("Battleship!");
pack(); //sets appropriate size for frame
setVisible(true);
}
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new FillGU();
}
});
}
答案 1 :(得分:2)
问题是你在类中扩展JFrame并创建新对象“frame”。您将组件(如JRadioButton或JTextArea)添加到fullGUI中,而JFrame的其他设置适用于框架对象。这取决于你要选择哪种方法,但选择其中一种方法。您可以扩展JFrame,您的类将是JFrame的子级,这意味着您可以从父类调用所有公共或受保护的方法,无需创建JFrame的新实例。其他方法是不扩展JFrame,而是必须创建新的JFrame对象。
答案 2 :(得分:2)
frame.pack()导致您的JFrame根据其内容调整大小。
如果您有frame.setSize(400,600),即使您没有向其内容窗格添加任何内容, 框架将以400x600的尺寸显示。
但是当你调用frame.pack()时,框架会调整大小。在您的情况下,框架的内容窗格不包含任何内容。因此,pack()方法将其大小调整为仅标题栏。
答案 3 :(得分:1)
正如Nikolay Kuznetsov在之前的回答中所说,你已经在fullGUI中扩展了Jframe,因此无需在该类中创建新的Jframe,因为FullGUI的每个实例都将是一个新帧。
用你代码发生的事情是你创建了一个Frame,比如frame1和fullGUI的实例(在主方法中)说frame2,这是两个不同的帧。在构造函数中,您已将这些控件添加到frame2(add()== this.add())并表示frame1.setvisible(true);
将控件添加到一个帧并显示完全不同的帧是您无法在输出scree上看到任何内容的原因,尽管您可以最大化屏幕。