1

我无法在 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);
            }
        });
    }
}
4

4 回答 4

2

显示动态对象..只能使用这种布局来完成(我猜)。

你猜错了。

参见这个 GUI,它不仅可以在运行时更改 PLAF,还可以动态添加新组件1。点击到..

Add Another Label

  1. 此示例将新标签添加到GridLayout- 但任何布局(或任何组件)的原理都是相同的。
于 2012-02-27T11:28:18.707 回答
2

设置容器的首选大小。

于 2012-02-27T09:02:20.770 回答
2

JScrollBar 使用其中组件的首选大小来确定滚动条应该有多大,以及是否应该显示它们。

通常,布局管理器使用 preferredLayoutSize 方法处理这个问题。这可以通过显式设置组件的首选大小来覆盖。

因此,要么您必须设置首选大小,要么使用自定义布局管理器为您计算它。

也见这里

可能会帮助你。

于 2012-02-27T09:14:33.447 回答
0

添加布局
jp.setLayout(new FlowLayout());

于 2012-02-27T12:14:22.510 回答