Использование полос прокрутки с абсолютной разметкой в ​​Swing - PullRequest
1 голос
/ 27 февраля 2012

Я не могу использовать полосы прокрутки с абсолютным макетом в 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 ]

2 голосов
/ 27 февраля 2012

отображать динамические объекты .. что можно сделать только с помощью этого макета (я думаю).

Вы ошибаетесь.

См. этот графический интерфейс , который может не только изменять PLAF во время выполнения, но и динамически добавлять новые компоненты 1 . Нажмите, чтобы ..

Добавить еще один ярлык

image

  1. В этом примере новые метки добавляются в GridLayout, но принцип одинаков для любого макета (или любого компонента).
1 голос
/ 27 февраля 2012

JScrollBar использует предпочтительный размер компонента внутри него, чтобы определить, насколько крупными должны быть полосы прокрутки, и должны ли они отображаться.

Обычно менеджер макета обрабатывает это с помощью метода предпочитаемое значение LayoutSize.Это можно переопределить, явно указав предпочтительный размер компонента.

Так что вам нужно либо установить предпочтительный размер, либо использовать собственный менеджер макета, который рассчитывает его для вас.

см. Также здесь

может помочь вам.

1 голос
/ 27 февраля 2012

Установить предпочтительный размер контейнера.

0 голосов
/ 27 февраля 2012

добавить макет
jp.setLayout(new FlowLayout());

...