Java 在Swing中使用具有绝对布局的滚动条

Java 在Swing中使用具有绝对布局的滚动条,java,swing,user-interface,layout,absolutelayout,Java,Swing,User Interface,Layout,Absolutelayout,我无法在Swing中使用绝对布局的滚动条 我不想使用这种布局,但我必须在我的面板上显示一个按钮点击动态对象,并使用设置框对齐它们,这只能使用这种布局来完成,我想 import javax.swing.*; import java.awt.*; import java.awt.event.*; public class clothes2 extends javax.swing.JFrame { JTextField n=null; JButton m=null; pu

我无法在Swing中使用绝对布局的滚动条

我不想使用这种布局,但我必须在我的面板上显示一个按钮点击动态对象,并使用设置框对齐它们,这只能使用这种布局来完成,我想

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);
            }
        });
    }
}

设置容器的首选大小。

设置容器的首选大小。

JScrollBar使用其中组件的首选大小来确定滚动条的大小以及是否应显示滚动条

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

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

另见


可能会对您有所帮助。

JScrollBar使用其中组件的首选大小来确定滚动条的大小以及是否应显示滚动条

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

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

另见

也许对你有帮助

显示动态对象。。我想只有用这个布局才能做到

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);
            }
        });
    }
}
你猜错了

请看,这不仅可以在运行时更改plaf,还可以动态添加新组件1。单击以

添加另一个标签

本例将新标签添加到GridLayout,但其原理对于任何布局或任何组件都是相同的。 显示动态对象。。我想只有用这个布局才能做到

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);
            }
        });
    }
}
你猜错了

请看,这不仅可以在运行时更改plaf,还可以动态添加新组件1。单击以

添加另一个标签

本例将新标签添加到GridLayout,但其原理对于任何布局或任何组件都是相同的。 添加布局 jp.setlayout新流程布局

添加布局
jp.setlayout新流程布局

我不想使用这种布局-好主意,简单地遵循它:-你正在做的手动对齐,大小和位置是一个布局管理器的工作,找到一个能正确完成这项工作的。似乎这段代码试图创建一系列大正方形文本字段,所有的宽度和高度都相同,从GUI的左上角开始。是这样吗?我不想使用这种布局-好主意,简单地遵循它:-你所做的手动对齐、大小和位置是布局经理的工作,找到一个能正确完成这项工作的。这段代码似乎试图在GUI左上角开始的列中创建一系列宽度和高度相同的大正方形文本字段。是吗?伙计们,我也试过首选尺寸这是我代码的链接,谢谢我以前也试过首选尺寸,但都没用。请检查代码。伙计们,我也试过首选尺寸。这是我代码的链接。谢谢。我以前也试过首选尺寸,但不起作用。请检查代码。伙计们,我也试过首选尺寸。这是我代码的链接。谢谢。我以前也试过首选尺寸,但不起作用。请检查代码。如果代码小于1KB,请将其编辑到问题中,而不是链接到问题中!伙计们,我也试过首选尺寸,这是我代码的链接,谢谢,我以前也试过首选尺寸,但没用。请检查代码。如果代码小于1KB,请将其编辑到问题中,而不是链接到问题中!我已经这样做了。我想说的是,我想把动态对象!是的,其他人也可以这样做!同意。已经尝试过网格布局。但我必须提供保证金。必须正确对齐它们。这不仅仅是在面板上扔东西。这就是为什么我使用绝对布局,这样我就可以使用挫折。也搜索了组布局,但添加动态对象失败。这不仅仅是在面板上投掷对象。当然不是,但是,你不会把它们“扔”到面板上,你到底把它们放在哪里?如果您可以用文字描述,我相信我们可以确定J2SE或第三方布局,以动态方式适应组件定位。我并不是说GridLayout是您用例的最终答案,这就是为什么我添加了&这次稍微响亮一点。这个示例将新标签添加到GridLayout中-但原则对于任何布局或任何组件都是一样的。我的意思是我要放动态对象!是的,其他人也可以这样做!同意。已经尝试过网格布局。但我必须提供保证金。必须正确对齐它们。这不仅仅是在面板上扔东西。这就是我使用absolut的原因 e布局,以便我可以使用收进框。也搜索了组布局,但添加动态对象失败。这不仅仅是在面板上投掷对象。当然不是,但是,你不会把它们“扔”到面板上,你到底把它们放在哪里?如果您可以用文字描述,我相信我们可以确定J2SE或第三方布局,以动态方式适应组件定位。我并不是说GridLayout是您用例的最终答案,这就是为什么我添加了&这次稍微大声一点,这个示例将新标签添加到GridLayout中-但是对于任何布局或任何组件,原则都是相同的。