我的null布局有问题。程序有这样的结构:
窗口(JFrame)
- 标签窗格(JTabbedPane)
- ..一些标签..
- 覆盖在JScrollPane(类表)
我也有一个覆盖的JLabel(类看板)。
我尝试在表中添加看板的一些实例,什么都没有。如果我将Table的布局从null更改为BorderLayout(例如),则元素出现并且运行良好。
Oracle文档说了大约3个步骤:1)设置null布局,2)在子元素上调用setBounds()和3)在具有null布局的元素上调用repaint()。这对我来说不起作用(非常非常,真的)。
表格放置代码(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);
怎么了?为什么元素不以null布局绘制?
---添加 我需要一个空布局,因为我需要标签的点位置。
答案 0 :(得分:2)
kanban.getWidth(), kanban.getHeight()
他们是0.但我同意上述所有评论。不要使用null布局。使用GridLayout
定义面板并将所有标签放在那里
答案 1 :(得分:0)
NUllLayout是最有效的布局管理器,因为随之而来的自由,您可以明确指定元素的放置位置。但要真正有效地使用它,您需要以像素为单位在Frame上绘制位置。在编码时应用一些几何,请考虑以下代码。
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的官方文档here