您好 我阅读了有关Layouts的内容,但没有得到哪一个用于我的应用程序。 我想将图像添加到JPanel并将JLabel放在标题栏正下方的右上角。
我已为此编写代码,但它无效。 JLabel显示在Center。
我的代码是
// Below line adds image to Jpanel
panel = new ImagePanel(backgroundImage);
// I want to add below label to Jpanel
JLabel jdesignNo=new JLabel(designNo);
jdesignNo.setFont((new java.awt.Font("Times New Roman", 1, 30)));
jdesignNo.setBounds(900, 100, 50, 30);
jdesignNo.setBackground(Color.GREEN);
panel.add(jdesignNo);
frame.getContentPane().add(panel);
frame.setVisible(true);
在上面的代码中,我已经通过setBound设置了所需的位置,但它不起作用。
如何解决这个问题?
谢谢!!!
答案 0 :(得分:8)
在上面的代码中,我已经通过setBound设置了所需的位置,但它不起作用。
没有必要这样做。你不应该使用setBounds(...)。使用布局管理器:
JLabel label = new JLabel("Some Text");
label.setHorizontalAlignment(JLabel.RIGHT);
frame.add(label, BorderLayout.NORTH);
答案 1 :(得分:4)
由于您的布局(图像)中有一个主要功能,您可能希望使用BorderLayout作为主要布局。
frame.getContentPane().setLayout(new BorderLayout(4, 4));
然后将图像添加到BorderLayout.CENTER
接下来,JLabel想要进入BorderLayout.NORTH
现在,如果你这样做,它就不会去最右边,所以为北方创建一个JPanel,将JLabel添加到面板,然后将面板放在北方。
现在您需要北面板的布局。 BoxLayout将起作用
northPanel.add(Box.createHorizontalGlue());
northPanel.add(label);
答案 2 :(得分:1)
确保你有
panel.setLayout(null);
如果您希望自己定位组件。
但是,随着应用程序复杂性的增加,识别和使用适合您需求的布局管理器会使事情变得更容易。
答案 3 :(得分:1)
GridBagLayout的可能性:
import java.awt.*;
import javax.swing.*;
public class MyPanel extends JPanel {
public MyPanel() {
setLayout(new GridBagLayout());
add(new JLabel("TOP RIGHT"), new GridBagConstraints(
0, // gridx
0, // gridy
1, // gridwidth
1, // gridheight
1, // weightx
1, // weighty
GridBagConstraints.NORTHEAST, // anchor <------------
GridBagConstraints.NONE, // fill
new Insets(0, // inset top
0, // inset left
0, // inset bottom
0), // inset right
0, // ipadx
0)); // ipady
}
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setResizable(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(new MyPanel());
frame.setSize(400, 400);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}
尼古拉斯