我准备添加两个组件到框架:
class Lamina extends JPanel{
public Lamina(){
setLayout(new BorderLayout(50,50));
JPasswordField user_password = new JPasswordField();
add(user_password, BorderLayout.SOUTH);
}
}
class DOMHeader extends JPanel
{
public DOMHeader()
{
setLayout(new BorderLayout());
JLabel title = new JLabel("Sign in");
add(title, BorderLayout.NORTH);
}
}
这是我的班级用户界面:
public class UI {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
Frame frame = new Frame();
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setResizable(true);
frame.setTitle("Metin2");
}
}
框架类:
class Frame extends JFrame {
public Frame() {
Toolkit screen = Toolkit.getDefaultToolkit();
Dimension screenSize = screen.getScreenSize();
int widthScreen = screenSize.width;
int heightScreen = screenSize.height;
setBounds((widthScreen/4/2),(heightScreen/4/2),(widthScreen/2/2), (heightScreen/2/2));
Image icon = screen.getImage("icon.jpeg");
setIconImage(icon);
/* Add to Components to frame*/
add(new DOMHeader());
add(new Lamina());
}
}
在我的班级框架I中添加前面显示的组件,但它"放在"之上。组件的另一个组件。
根据API:
public Component add(Component comp,int index)
将指定的组件添加到给定位置的此容器中 (索引)。
我运行主要方法:
如您所见,它只显示组件DOMHeader
类:add(new DOMHeader())
add(new Lamina())
我应该给它什么数字或常数?
答案 0 :(得分:3)
这一行:
class Frame extends JFrame {
由于以下原因,不正确:
Frame
class JFrame
,但您以后永远不会更改JFrame
的行为,因此无需延长JFrame
但create it inside of class 现在,我们必须前往JFrame
课程,其中说:
默认内容窗格上将设置BorderLayout管理器。
现在,如果我们转到BorderLayout
部分的布局管理器视觉指南,我们可以看到以下图片:
这告诉我们,我们只能将我们的组件添加到5个位置:
PAGE_START
(或NORTH
)LINE_START
(或WEST
)CENTER
LINE_END
(或EAST
)PAGE_END
(或SOUTH
)回答你的问题:
根据API:
public Component add(Component comp,int index)
将指定的组件添加到给定位置(索引)的此容器中。
我应该给它什么数字或常数?
你需要按如下方式添加它:
JFrame frame = new JFrame("Write your title here"); //Follow first advice
frame.add(new DOMHeader(), BorderLayout.NORTH); //These are the constants.
frame.add(new Lamina(), BorderLayout.SOUTH);
您通过在自己的JPanel
中添加位置中的项目而不是JFrame
本身,让您感到困惑。
旁注:为什么要进行这些奇怪的计算?
setBounds((widthScreen/4/2),(heightScreen/4/2),(widthScreen/2/2), (heightScreen/2/2));
如果你打电话给widthScreen / 8
?
根据@camickr评论:
不需要DOMHeader和Lamina类。您不需要扩展JPanel只是为了向框架添加组件。 "内容窗格" JFrame是JPanel,因此您只需将标签和文本字段添加到框架中,如上所示。
您也可以通过以下方式改进代码:
JFrame frame = new JFrame("Your title here");
JLabel title = new JLabel("Sign in");
JPasswordField userPassword = new JPasswordField(); //changed variable name to userPassword instead of user_password to follow Java naming conventions
frame.add(title, BorderLayout.NORTH);
frame.add(userPassword, BorderLayout.SOUTH);
frame.setVisible(true); //This line should be the last one or you'll find yourself with strange "bugs" when your application starts until you move it or resize it
无需为每个组件创建全新的JPanel
。