我有一个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的官方文档