Как разместить JLabel в правом верхнем углу чуть ниже строки заголовка? - PullRequest
0 голосов
/ 01 мая 2011

Hello Я читал о макетах, но не получил, какой из них использовать для моего приложения. Я хочу добавить изображение в 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, но это не работает.

Как решить эту проблему?

Спасибо !!!

Ответы [ 4 ]

8 голосов
/ 02 мая 2011

В приведенном выше коде я установил требуемое местоположение с помощью setBound, но это не работает.

Нет необходимости делать это. Вы не должны использовать setBounds (...). Используйте менеджеры по расположению:

JLabel label = new JLabel("Some Text");
label.setHorizontalAlignment(JLabel.RIGHT);
frame.add(label, BorderLayout.NORTH);
4 голосов
/ 02 мая 2011

Поскольку у вас есть доминирующая функция в макете (изображение), вы, вероятно, захотите использовать BorderLayout в качестве основного макета.

frame.getContentPane().setLayout(new BorderLayout(4, 4));

затем добавьте изображение в BorderLayout.CENTER

Далее JLabel хочет перейти в BorderLayout.NORTH

Теперь, если вы сделаете это, он не пойдет далеко вправо, поэтому создайте JPanel для севера, добавьте JLabel на панель и поместите панель на север.

Теперь вам нужен макет для северной панели. BoxLayout будет работать

northPanel.add(Box.createHorizontalGlue());
northPanel.add(label);
1 голос
/ 02 мая 2011

Возможность с 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);
    }
}

Николас

1 голос
/ 02 мая 2011

Убедитесь, что у вас есть

panel.setLayout(null);

, если вы хотите расположить компоненты самостоятельно.

Но идентификация и использование менеджера компоновки, который бы соответствовал вашим потребностям, облегчили бы задачу по мере роста сложности вашего приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...