我正在尝试使用JPanel
将i.add(jp, BorderLayout.EAST);
的位置设置为右侧,但它无效。有什么想法吗?感谢您的帮助。
/* INSTANCE DECLARATIONS */
private JTextField tf;//text field instance variable
private JLabel jl2;//label instance variable
/*****************
* WINDOW METHOD *
* ***************/
public void window() {
LoadImageApp i = new LoadImageApp();//calling image class
JFrame gameFrame = new JFrame();//declaration
JPanel jp = new JPanel();
JLabel jl = new JLabel("Enter a Letter:");//prompt with label
tf = new JTextField(1);//length of text field by character
jl2 = new JLabel("Letters Used: ");
jp.add(jl);//add label to panel
jp.add(tf);//add text field to panel
jp.add(jl2);//add letters used
gameFrame.add(i); //adds background image to window
i.add(jp, BorderLayout.EAST); // adds panel containing label to background image panel
gameFrame.setTitle("Hangman");//title of frame window
gameFrame.setSize(850, 600);//sets size of frame
gameFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//exit when 'x' button pressed
gameFrame.setIconImage(new ImageIcon("Hangman-Game-grey.png").getImage());//set the frame icon to an image loaded from a file
gameFrame.setLocationRelativeTo(null);//window centered
gameFrame.setResizable(false);//user can not resize window
gameFrame.setVisible(true);//display frame
}//end window method
答案 0 :(得分:5)
您的i
实例使用的LoadImageApp
布局管理器使用什么?我打赌它不是BorderLayout
。我打赌LoadImageApp
类扩展JPanel
如果是这样,如果你从未明确设置其布局,那么它默认使用FlowLayout
,当你发现时, FlowLayout
不尊重BorderLayout.EAST
int常量。
解决方案可能非常简单:使用BorderLayout
:
setLayout(new BorderLayout());
修改强>
您在评论中说明:
当我将i的边框布局设置为EAST时,我的背景图像也会向右移动,有没有办法绕过它?
不,你错过了这一点。您需要将LoadImageApp的布局设置为BorderLayout。你不应该添加我的BorderLayout.EAST。这从未被推荐给你。
即,
public class LoadImageApp extends JPanel {
// in the constructor
public LoadImageApp() {
setLayout(new BorderLayout());
}
// .... etc....
}
LoadImageApp实例(我将其命名为loadImageApp,而不是i
)应该添加BorderLayout.CENTER,这是您之前所做的。请阅读布局管理器教程,您可以找到here。