Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将JLabel放置在标题栏正下方的右上角?_Java_Swing - Fatal编程技术网

Java 如何将JLabel放置在标题栏正下方的右上角?

Java 如何将JLabel放置在标题栏正下方的右上角?,java,swing,Java,Swing,你好 我读过关于布局的文章,但没有找到适合我的应用程序的布局。 我想将图像添加到JPanel,并将JLabel放在标题栏下方的右上角 我已经为此编写了代码,但它不起作用。JLabel显示在中间 我的代码是 // Below line adds image to Jpanel panel = new ImagePanel(backgroundImage); // I want to add below label to Jpanel JLabel jdesignNo=new JLabel(d

你好 我读过关于布局的文章,但没有找到适合我的应用程序的布局。 我想将图像添加到JPanel,并将JLabel放在标题栏下方的右上角

我已经为此编写了代码,但它不起作用。JLabel显示在中间

我的代码是

// 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设置了所需的位置,但它不起作用

如何解决这个问题

谢谢

确保你有

panel.setLayout(null);
如果您希望自己定位组件


但是,随着应用程序复杂性的增加,识别和使用符合您需要的布局管理器会使事情变得更容易。

因为您的布局中有一个主要的功能—图像—您可能希望使用边界布局作为主布局

frame.getContentPane().setLayout(new BorderLayout(4, 4));
然后将图像添加到BorderLayout.CENTER

接下来,JLabel要进入BorderLayout.NORTH

现在,如果这样做,它将不会转到最右侧,因此为北部创建一个JPanel,将JLabel添加到面板中,然后将面板放置在北部

现在,您需要北面板的布局。一个盒子的布局就行了

northPanel.add(Box.createHorizontalGlue());
northPanel.add(label);
在上面的代码中,我通过setBound设置了所需的位置,但它不起作用

没有必要这样做。您不应该使用收进框。。。。使用布局管理器:

JLabel label = new JLabel("Some Text");
label.setHorizontalAlignment(JLabel.RIGHT);
frame.add(label, BorderLayout.NORTH);

具有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);
    }
}

Nicolas

BorderLayout是顶级容器的默认布局。此外,remove和setLayout已被覆盖,以便根据需要转发到contentPane。-.:设置空布局后。。我开始工作了。现在它根据我的需要显示位置。真棒:这对我有帮助:D