我是新手,我有一个问题。我正在尝试使用Eclipse编写一个Java窗口应用程序,其中我将有一个主窗口,它将包含几个东西,比如仪表板类的东西,它将有按钮,例如将记录添加到数据库,按下此按钮,将在顶部打开一个新的相关窗口。
我试着开始,我用Java编写了这段代码,出于某种原因,按钮的大小与框架一样......全屏!我该如何解决?
你能否为我提出比我指定的设计更好的想法?
谢谢
public class MainClass {
public static void main(String[] args) {
// TODO Auto-generated method stub
JFrame jfrm = new JFrame("Frame1");
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
jfrm.setSize(screenSize.width, screenSize.height);
jfrm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JLabel jlab = new JLabel("Hello");
jfrm.add(jlab);
JButton button = new JButton("Button");
button.setSize(new Dimension(50, 50));
button.setLocation(500, 350);
jfrm.getContentPane().add(button);
jfrm.setVisible(true);
}
答案 0 :(得分:3)
首先向JFrame添加布局。例如FlowLayout
:
jfrm.setLayout(new FlowLayout());
答案 1 :(得分:3)
“我试着开始,我用Java编写了这段代码,出于某种原因,按钮的大小与帧一样......全屏!我该如何解决?”
按钮拉伸的原因是因为JFrame
的默认BorderLayout
不符合子组件的首选大小。
解决方案是将布局管理器设置为 尊重首选大小的布局。来自this example的图像显示最常见的布局管理器,并直观地显示哪一个尊重子组件的首选大小。
此外,BorderLayout
也是JLabel
未展示的原因。默认情况下,添加到BorderLayout
而没有指定位置的每个组件,例如BorderLayout.SOUTH
会自动置于BorderLayout.CENTER
位置。每个职位可能只有一个部分。因此,当您添加JLabel
时,它会转到CENTER
,但是当您添加JButton
时,它也会转到CENTER
,从而推出JLabel
。
如果您从未遇到布局管理器,这可能会让您感到困惑。你应该花时间过去How to Layout Components Within a Container
答案 2 :(得分:0)
您必须使用Layout manager。
使用此代码..
public static void main(String[] args)
{
JFrame jfrm = new JFrame("Frame1");
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
jfrm.setSize(screenSize.width, screenSize.height);
jfrm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JLabel jlab = new JLabel("Hello");
jfrm.add(jlab);
JButton button = new JButton("Button");
button.setSize(new Dimension(50, 50));
button.setLocation(500, 350);
jfrm.add(button);
jfrm.setVisible(true);
jfrm.setLayout(new FlowLayout());
jfrm.pack();
您忘了添加pack()
。所以使用这段代码并排获得Jlabel和JButtion。
...谢谢
答案 3 :(得分:0)
您需要使用某种形式的布局管理器,您可以使用以下信息:http://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html