Размещение JLabel в определенной координате x,y на JPanel
Я пытаюсь разместить ряд JLabels в определенных координатах X и Y на JPanel (и установить его высоту и ширину). Что бы я ни делал, каждая этикетка оказывается справа от предыдущей и имеет точно такой же размер, как и все остальные.
прямо сейчас моя Jpanel находится в макете сетки. Я пробовал абсолютный макет (результаты исключения незаконных аргументов), бесплатный дизайн (не появляются метки), макет потока (все просто сжимается до центра) и несколько другие.
Не уверен, что мне нужно сделать, чтобы сделать эту работу. Кто-нибудь может помочь? Спасибо!
JLabel lbl1 = new JLabel("label 1");
JLabel lbl2 = new JLabel("label 2");
JLabel lbl3 = new JLabel("label 3");
JLabel lbl4 = new JLabel("label 4");
JLabel lbl5 = new JLabel("label 5");
myPanel.add(lbl1);
myPanel.add(lbl2);
myPanel.add(lbl3);
myPanel.add(lbl4);
myPanel.add(lbl5);
lbl1.setLocation(27, 20);
lbl2.setLocation(123, 20);
lbl3.setLocation(273, 20);
lbl4.setLocation(363, 20);
lbl5.setLocation(453, 20);
lbl1.setSize(86, 14);
lbl2.setSize(140, 14);
lbl3.setSize(80, 14);
lbl4.setSize(80, 14);
lbl5.setSize(130, 14);
6 ответов
вы должны установить макет вашего контейнера в null:
myPanel.setLayout(null);
однако хороший совет также взглянуть на менеджера макета Matisse, я думаю, что теперь он называется GroupLayout. Основная проблема с абсолютным позиционированием заключается в том, что происходит, когда окно меняет свой размер.
установите диспетчер компоновки контейнера в значение null, вызвав
setLayout(null)
.вызовите класс компонента
setbounds
метод для каждого из дочерних элементов контейнера.вызовите метод repaint класса компонента.
Примечание:
создание контейнеров с абсолютно расположенными контейнерами может вызвать проблемы, если окно, содержащее контейнер, изменяется.
передать этот ссылка на сайт: http://docs.oracle.com/javase/tutorial/uiswing/layout/none.html
менеджеры компоновки используются для автоматического определения компоновки компонентов в контейнере. Если вы хотите разместить компоненты в определенных координатных местоположениях,то вам вообще не следует использовать менеджер макетов.
myPanel = new JPanel(null);
или
myPanel.setLayout(null);
мой совет-использовать IDE, как NetBeans С его редактором GUI. Для проверки кода и потому есть много способов:
настройка менеджера макетов или для абсолютного позиционирования делает myPanel.setLayout (null), имеет несколько влияний.
В общем случае, предполагая, что вы выполняете свои вызовы в конструкторе JFrame, вы можете вызвать pack()
для начала разметки.
тогда каждый менеджер макетов использует свою собственную реализацию add(Component)
или add(Component, Constraint)
. Использование BorderLayout с add (label, BorderLayout.Центр) и так далее.
// Best solution!!
import java.awt.Dimension;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class Main {
public static void main(String args[]) {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = (JPanel) frame.getContentPane();
panel.setLayout(null);
JLabel label = new JLabel("aaa");
panel.add(label);
Dimension size = label.getPreferredSize();
label.setBounds(100, 100, size.width, size.height);
frame.setSize(300, 200);
frame.setVisible(true);
}
}
вы можете использовать свой собственный метод, вызывающий значения setSize, setLocation для напрямую....! ` Также я покажу вам, как использовать Jprogress Bar
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class installComp{
void install(Component comp, int w, int h, int x, int y){
comp.setSize(w,h);
comp.setLocation(x,y);
}
}
class MyFrame extends JFrame{
int cur_val = 0;
JButton btn = new JButton("Mouse Over");
JProgressBar progress = new JProgressBar(0,100);
MyFrame (){
installComp comp=new installComp();
comp.install(btn,150,30,175,20);
comp.install(progress,400,20,50,70);
btn.addMouseListener(new MouseAdapter(){
public void mouseEntered(MouseEvent evt){
cur_val+=2;
progress.setValue(cur_val);
progress.setStringPainted(true);
progress.setString(null);
}
});
add(btn);
add(progress);
setLayout(null);
setSize(500,150);
setResizable(false);
setDefaultCloseOperation(3);
setLocationRelativeTo(null);
setVisible(true);
}
}
class Demo{
public static void main(String args[]){
MyFrame f1=new MyFrame();
}
}