我有这段代码
package com.net.Forms;
import javax.swing.JButton;
import javax.swing.JFrame;
public class MainForm {
protected static JFrame window = new JFrame("Test Form");
protected static JButton btnOK = new JButton("OK!");
public static void Main() {
load();
return;
}
public static void load() {
window.setSize(500, 500);
window.setVisible(true);
//btnOK.setSize(50, 50); //here
window.add(btnOK);
btnOK.setEnabled(true);
btnOK.setVisible(true);
}
}
为什么按钮仍然在填充框架而不是像上面所述的50 X 50
任何帮助将不胜感激
答案 0 :(得分:5)
JFrame
的默认布局为BorderLayout
。这就是为什么当您向其添加JButton
时,它会将JButton
添加到center
并将其展开以覆盖整个窗口。 BorderLayout
不尊重添加到其中的组件的setSize(..)
方法。如果您仍想为要添加到JFrame
的组件指定首选大小,则应将布局更改为FlowLayout
或GridLayout
或其他..然后使用setPreferredSize(..)
将组件添加到JFrame
时使用该组件的方法。例如,您的代码可以通过以下方式进行修改。
import java.awt.*;
import javax.swing.*;
public class MainForm {
protected JFrame window = new JFrame("Test Form");
protected JButton btnOK = new JButton("OK!");
public static void main(String st[]) {
SwingUtilities.invokeLater( new Runnable()
{
public void run()
{
MainForm mf = new MainForm();
mf.load();
}
});
}
public void load() {
Container c = window.getContentPane();
c.setLayout(new FlowLayout());//Set layout to be FlowLayout explicitly.
btnOK.setPreferredSize(new Dimension(100,50));//use set PreferredSize
c.add(btnOK);
c.setSize(500, 500);
c.setVisible(true);
}
}
答案 1 :(得分:-2)
它只是一个错误或某事。 添加到框架的最后一个元素Takes Whole of it。
你需要做的一切:
声明一个新的简单组件,如JLabel()
将其添加到框架中
不要为它设置边界或大小。只是一个新的标签
请确保此标签是添加到框架的最后一个元素
希望它有效。