使用空布局放置元素



我有一个null布局的问题。程序的结构如下:

窗口(JFrame)
   -标签面板(JTabbedPane)
,,,,,, . .一些标签…
        

我也有一个重写的JLabel(类看板)。

我试着在表中添加一些看板实例,但什么也没有。如果我将表的布局从null更改为BorderLayout(例如),元素就会出现并且工作良好。

Oracle文档说了大约3个步骤:1)设置null布局,2)调用setBounds()子元素和3)调用repaint()元素与null布局。这对我来说不是工作(很奇怪,真的)。

表放置代码(Window的构造函数):

Table table = new Table();
JScrollPane panel = new JScrollPane(table);
tabbedPanel.addTab("New tab", panel);
tabbedPanel.setSelectedIndex(tabbedPanel.getTabCount() - 1);
table.setPreferredSize(new Dimension(600, 400));
table.setSize(600, 400);

表构造函数:

setDoubleBuffered(true);
setLayout(null);
setBounds(0,0,600,400);
Kanban kanban = new Kanban("Label text");
kanban.setBounds(10, 10, kanban.getWidth(), kanban.getHeight());
add(kanban);

怎么了?为什么元素不画在空布局?

——添加我需要一个空布局,因为我需要标签的点位置

kanban.getWidth(), kanban.getHeight()均为0。但是我同意上面所有的评论。不要使用空布局。用GridLayout定义一个面板,并将所有标签放在那里

NUllLayout是最有效的布局管理器,因为它带来了自由,您可以显式指定元素的放置位置。但要真正有效地使用它,你需要用像素来表示帧上的位置。在编码中应用一些几何,考虑以下代码:

package com.samuTech.DialogBoxes;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.JPasswordField;
import javax.swing.JButton;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import javax.swing.JLabel;
public class NullLayout2 extends JFrame {
private static JLabel nameLabel;
private static JLabel passwordLabel;
private static JTextField userName;
private static JPasswordField pass;
private static JButton ok;
public NullLayout2(){
    super("Null Layout");
    setSize(getMaximumSize().width,getMaximumSize().height);
    setLocation(getLocation().x,getLocation().y);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setVisible(true);
    getContentPane().setBackground(Color.BLUE);
    setLayout(null);
    nameLabel = new JLabel("User Name");
    passwordLabel = new JLabel("Password");
    userName =  new JTextField(20);
    pass = new JPasswordField(20);
    ok = new JButton("Ok");
    userName.setBounds(200,100,200,30);
    pass.setBounds(200,150,200,30);
    ok.setBounds(300,200,100,30);
    nameLabel.setBounds(5,100,150,30);
    passwordLabel.setBounds(5,150,150,30);
    add(userName);
    add(passwordLabel);
    add(nameLabel);
    add(pass);
    add(ok);
}
public void pain(Graphics g){
    g.drawString("Graphitii trials ", 55, 400);
}
public static void main(String[]args){
    javax.swing.SwingUtilities.invokeLater(
            new Runnable(){
                @Override
                public void run(){
                    new NullLayout2();
                }
            }
    );
}

}

不要放弃一个你在软件开发生活中明显需要的工具,特别是GUI设计,请参阅这里的Null Layout的官方文档

相关内容

  • 没有找到相关文章

最新更新