【发布时间】:2012-02-27 08:53:10
【问题描述】:
我无法在 Swing 中使用绝对布局的滚动条。
我不希望使用此布局,但我必须在单击按钮时在面板上显示动态对象并使用 setBounds 对齐它们,这只能使用此布局来完成(我猜)。
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class clothes2 extends javax.swing.JFrame {
JTextField n=null;
JButton m=null;
public clothes2(){
initComponents();
}
public void initComponents() {
Container contentPane = getContentPane();
contentPane.setLayout(new BorderLayout());
final JPanel jp = new JPanel();
contentPane.setPreferredSize(new Dimension(320,200));
jp.setLayout(null);
m=new JButton("add");
m.setBounds(0,0,50,50);
jp.add(m);
m.addMouseListener( new MouseAdapter() {
int x=0;
int y=0;
public void mouseClicked(MouseEvent me){
x+=100;
y+=100;
jp.add(n=new JTextField("Name"));
n.setBounds(x, y, 50, 50);
jp.add(n=new JTextField("code"));
x+=100;
n.setBounds(x,y, 50, 50);
jp.revalidate();
jp.repaint();
x=0;
}
});
int v = ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS;
int h = ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS;
JScrollPane jsp = new JScrollPane(jp, v, h);
contentPane.add(jsp, BorderLayout.CENTER);
}
public static void main(String args[]) {
EventQueue.invokeLater(new Runnable() {
public void run() {
JFrame f= new clothes2();
f.setVisible(true);
f.setSize(640,320);
}
});
}
}
【问题讨论】:
-
我不希望使用这种布局 - 好主意,只需遵循它 :-) 您手动执行的操作(对齐、大小和位置)是 LayoutManager 的工作,找到一个能正确完成这项工作的人。
-
似乎这段代码试图在从 GUI 左上角开始的列中创建一系列大的方形文本字段(宽度和高度都相同)。对吗?
标签: java swing user-interface layout absolutelayout