Nano Hash - криптовалюты, майнинг, программирование

Использование полос прокрутки с абсолютным макетом в Swing

Я не могу использовать полосы прокрутки с абсолютным макетом в 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, найдите тот, который делает эту работу правильно. 27.02.2012
  • Кажется, этот код пытается создать серию больших квадратных текстовых полей (все одинаковой ширины и высоты) в столбце, начинающемся в левом верхнем углу графического интерфейса. Это правильно? 27.02.2012

Ответы:


1

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

27.02.2012
  • ребята, я также попробовал предпочтительный размер, это ссылка на мой код /а> спасибо 27.02.2012
  • Я пробовал предпочтительный размер и раньше, но это не сработало. Пожалуйста, проверьте код. 27.02.2012

  • 2

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

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

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

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

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

    27.02.2012
  • ребята, я также попробовал предпочтительный размер, это ссылка на мой код /а> спасибо 27.02.2012
  • Я пробовал предпочтительный размер и раньше, но это не сработало. Пожалуйста, проверьте код. 27.02.2012
  • Если размер кода меньше 1 КБ, просто отредактируйте его в вопросе, а не ссылайтесь на него! (Я сделал это.) 27.02.2012

  • 3

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

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

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

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

    1. В этом примере новые метки добавляются к GridLayout, но принцип одинаков для любого макета (или любого компонента).
    27.02.2012
  • я хотел сказать, что я хочу поместить динамические объекты! да это могут сделать и другие! согласованный. пробовал с сеткой. но я должен предоставить маржу. должны правильно их выровнять. дело не в том, чтобы просто бросать предметы на панель. Вот почему я использую абсолютный макет, чтобы я мог использовать setBounds. также искал групповую компоновку, но не смог добавить динамические объекты. 27.02.2012
  • Дело не в том, чтобы просто бросать предметы на панель. Конечно, нет, но ведь вы не «бросаете их» на панель, а куда именно вы их кладете? Если вы можете описать это словами, я уверен, что мы сможем определить макет J2SE или стороннего производителя, который будет обеспечивать динамическое позиционирование этого компонента. Я не имел в виду, что GridLayout был окончательным ответом для вашего варианта использования, поэтому я добавил (и на этот раз немного громче) В этом примере новые метки добавляются в GridLayout, но принцип тот же для < b>любой макет (или любой компонент). 27.02.2012

  • 4

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

    27.02.2012
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..