我为Jaabel设置了相对于JPanel的位置(0,0)。但它正在中心和顶部。我犯了什么错误?
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class Main extends JFrame
{
private JPanel panel;
private JLabel label1;
public Main()
{
panel = new JPanel();
panel.setBackground(Color.YELLOW);
ImageIcon icon1 = new ImageIcon("3.png");
label1 = new JLabel(icon1);
label1.setLocation(0,0);
panel.add(label1);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.getContentPane().add(panel);
this.setSize(500,500);
this.setVisible(true);
}
public static void main (String[] args) {
new Main();
}
}
答案 0 :(得分:8)
将布局管理器设置为null
对我不起作用。试试这个:
// setLocation(0,0); //remove line.
panel.setLayout(new FlowLayout(FlowLayout.LEFT)); // change from 'centered'
瞧! :)我建议您调查新的RelativeLayout
经理。
答案 1 :(得分:8)
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.net.URL;
public class Main extends JFrame
{
private JPanel panel;
private JLabel label1;
public Main() throws Exception
{
// Do use layouts (with padding & borders where needed)!
panel = new JPanel(new FlowLayout(FlowLayout.LEFT));
panel.setBackground(Color.YELLOW);
URL url = new URL("http://pscode.org/media/starzoom-thumb.gif");
ImageIcon icon1 = new ImageIcon(url);
label1 = new JLabel(icon1);
// Don't use null layouts, setLocation or setBounds!
//label1.setLocation(0,0);
panel.add(label1);
pack();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
getContentPane().add(panel);
setSize(400,200);
setLocationByPlatform(true);
setVisible(true);
}
public static void main (String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
try {
new Main();
} catch(Exception e) {
e.printStackTrace();
}
}
});
}
}
对这个帖子的回复似乎有很多混淆,所以澄清一件事:
JPanel
确实有FlowLayout
。 FlowLayout
来自'no args'构造函数,例如new FlowLayout()
1 。 FlowLayout
的no-args构造函数生成..
(1)..一个新的FlowLayout,具有居中对齐和默认的5个单位水平和垂直间隙。
答案 2 :(得分:3)
您不能这样做,因为默认布局管理器关心将元素渲染到面板中。
如果您真的想在位置上设置元素,请选择说panel = new JPanel(null);
但是等一下!你真的想这样做吗?我相信你没有。我们(java程序员)通常使用布局管理器提供的服务来在屏幕上呈现元素。你必须花一个小时来学习和理解这个概念,然后我向你保证你将使用这种技术而忘记在屏幕上手动渲染元素,这是一个非常糟糕的梦想。
答案 3 :(得分:2)
Component
Container
LayoutManager
时,您无法设置setLayout(null)
的绝对位置。您必须先致电JPanel
{{1}},然后才能运作。
答案 4 :(得分:1)
写作
panel = new JPanel();
你强制面板使用FlowLayout,它内联添加元素。你可以使用
panel = new JPanel(null);
如果你想通过禁用FlowLayout管理器获得更多性能,但通过这样做你必须注意讨厌的东西,比如组件的位置,尺寸等等。我认为最好使用layout managers
答案 5 :(得分:1)
setLayout(null); //set your frame layout to null for abs. positioning
yourPanel = new JPanel(); // create your JPanel
yourPanel.setLayout(null); // set the layout null for this JPanel !
text1 = new JLabel("SB"); // create some stuff
text2 = new JLabel("BB");
yourPanel.add(text1); // add the stuff to the JPanel
yourPanel.add(text2);
yourPanel.getComponent(0).setBounds(0,0, 20, 20); // set your position of your elements inside your JPanel
yourPanel.setBorder(BorderFactory.createLineBorder(Color.black)); // set a testing border to help you position the elements better
yourPanel.setBounds(30, 200, 750, 220); // set the location of the JPanel
//给我回复