Как поставить пробелы между jlabel?

Привет, я пытаюсь создать настольное приложение Java, в котором я использую несколько jlabel. Я хочу, чтобы между каждой меткой было мало пробелов.

как я могу достичь этого

вот мой код

public class Second extends javax.swing.JFrame {
JLabel label=new JLabel();
    /**
     * Creates new form Second
     */
    public Second() {
          this.getContentPane().setBackground(new java.awt.Color(255, 140, 0));
this.setExtendedState(JFrame.MAXIMIZED_BOTH);
this.setUndecorated(true);
JButton print= new JButton();
print.setBackground(new java.awt.Color(153, 153, 0));
            print.setOpaque(true);
            print.setBounds(525,1282,130,85);
            print.setFont(new java.awt.Font("Times New Roman", 1, 24)); // NOI18N
          print.setForeground(new java.awt.Color(255,255,255));
            print.setText("Print");
            this.add(print);

          JButton home= new JButton();
home.setBackground(new java.awt.Color(153, 153, 0));
            home.setOpaque(true);
            home.setBounds(640,1282,130,85);
            home.setFont(new java.awt.Font("Times New Roman", 1, 24)); // NOI18N
          home.setForeground(new java.awt.Color(255, 255,255 ));
            home.setText("Home");
            this.add(home);

int Height = 134;
int a=100;
             ArrayList<JLabel> label = new ArrayList<JLabel>();

  for(int i=0;i<23;i++){
         JLabel j = new JLabel();
           j.setBackground(new java.awt.Color(255, 140, 255));
            j.setOpaque(true);
            j.setBounds(5,Height,378,50);
            j.setFont(new java.awt.Font("Times New Roman", 1, 16)); // NOI18N
          j.setForeground(new java.awt.Color(128, 128, 128));
            j.setText("Case                                  Item                         CourtNo   ");
             LineBorder line = new LineBorder(Color.blue, 2, true);

       j.setBorder(line);
            this.add(j);
            label.add(j);


               JLabel j1 = new JLabel();
            j1.setBackground(new java.awt.Color(255, 140, 0));
            j1.setOpaque(true);
            j1.setBounds(390,Height,768,50);
            j1.setFont(new java.awt.Font("Times New Roman", 1, 16)); // NOI18N
            j1.setForeground(new java.awt.Color(128, 128, 128));
            j1.setText("Case                                 Item                         CourtNo   ");
            this.add(j1);
            label.add(j1);


               Height = Height +50;
               a=a+10;
  }




        initComponents();


    }
  public void paint(Graphics g) {
        super.paint(g);

         Graphics2D g3 = (Graphics2D) g;
      BasicStroke bs = new BasicStroke(2);
    Line2D lin1 = new Line2D.Float(386, 100, 386, 1282);
      Line2D lin = new Line2D.Float(0, 1283, 768, 1283);
      Line2D line3=new Line2D.Float(400,1284,400,1364);
    g3.setStroke(bs);
     g3.setColor(Color.white);
     g3.draw(lin1);
     g3.draw(lin);
     g3.draw(line3);;

  }
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Second().setVisible(true);
            }
        });
    }}

Мой новый код

public class Testing1 extends javax.swing.JFrame {


    public Testing1() {

             JFrame frame = new JFrame();
        JPanel panel = createPanel();
        panel.setLocation(100, 100);
        //panel.setLayout(null);
        this.add(panel);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.pack();
        this.setLocationRelativeTo(null);
        this.setVisible(true);

        initComponents();
    }


     private JPanel createPanel() {
    jPanel1 = new JPanel(new GridLayout(0, 1, 10, 5));
        EmptyBorder panelBorder = new EmptyBorder(10, 10, 10, 10);
        jPanel1.setBorder(panelBorder);
        EmptyBorder border = new EmptyBorder(5, 20, 5, 20);
        LineBorder line = new LineBorder(Color.blue, 2, true);
        CompoundBorder compound = new CompoundBorder(line, border);
        for (int i = 0; i <12; i++) {
            JLabel label = new JLabel("Label" + i);
            label.setBorder(compound);
           // label.setBounds(13, 100, 100, 50);
           jPanel1.add(label);
        }
        return jPanel1;
    }



    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        jPanel1 = new javax.swing.JPanel();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jPanel1.setBackground(new java.awt.Color(204, 0, 153));

        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 306, Short.MAX_VALUE)
        );
        jPanel1Layout.setVerticalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 243, Short.MAX_VALUE)
        );

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(0, 94, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(46, 46, 46)
                .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addContainerGap())
        );

        pack();
    }                      


    public static void main(String args[]) {


        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Testing1().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify                     
    private javax.swing.JPanel jPanel1;
    // End of variables declaration                   
}

обновлено Заранее спасибо


person user3456343    schedule 26.03.2014    source источник
comment
Прочитайте как использовать LayoutManager.   -  person alex2410    schedule 26.03.2014
comment
Как ставить пробелы между jlabel? - setBounds: нет; Использовать EmptyBorders: да; Использовать LayoutManagers с пробелами: да   -  person Paul Samsotha    schedule 26.03.2014
comment
@peeskillet.. как я могу это использовать, можешь немного объяснить?   -  person user3456343    schedule 26.03.2014
comment
добавьте свой полный код.. вы спрашиваете о пробелах между вашими метками с именами Case,Item и CourtNo ..   -  person Prakash    schedule 26.03.2014
comment
@prakash я обновил свой полный код   -  person user3456343    schedule 26.03.2014
comment
@user3456343 user3456343 именно здесь вам нужны пробелы между метками. можете ли вы четко объяснить ..   -  person Prakash    schedule 26.03.2014
comment
когда я запускаю эту программу, она работает   -  person user3456343    schedule 26.03.2014
comment
но я хочу, чтобы при создании jlabel во время выполнения он содержал пробелы среди всех jlabel   -  person user3456343    schedule 26.03.2014
comment
Графические интерфейсы Java могут работать на нескольких платформах, с разными разрешениями экрана и с использованием разных PLAF. Как таковые они не способствуют точному размещению компонентов. Чтобы организовать компоненты для надежного графического интерфейса, вместо этого используйте менеджеры компоновки или их их комбинации, а также отступы и границы макета для пробел. И да, все это можно сделать с помощью графического конструктора Netbeans, если вы знаете, как это сделать. До тех пор лучше придерживаться кода вручную.   -  person Andrew Thompson    schedule 26.03.2014


Ответы (2)


"Как поставить пробелы между jlabel?"

setBounds and null layouts: нет; Используйте EmptyBorders: YES!; Используйте LayoutManagers: ДА!

"как я могу это использовать, можешь немного объяснить"

Можно использовать значение по умолчанию FlowLayout для содержащий JPanel (или в этом случае установите промежутки FlowLayout)

Конструктор FlowLayout:

public FlowLayout(int align,
      int hgap,
      int vgap)

align - значение выравнивания

hgap - горизонтальный зазор между компонентами и между компонентами и границами Контейнера

vgap - вертикальный зазор между компонентами и между компонентами и границами Контейнера

Пример

JPanel panel = new JPanel(new FlowLayout(FlowLayout.CENTER, 20, 5);
for (int i = 0; i < 10; i++) {
    panel.add(new JLabel("Label" + i));
}

Вы можете использовать EmptyBorder

Конструктор EmptyBorder

public EmptyBorder(int top,
       int left,
       int bottom,
       int right)

top - верхняя вставка границы

left - левая вставка границы

bottom - нижняя вставка границы

right - правая вставка границы

Пример

JPanel panel = new JPanel();
for (int i = 0; i < 10; i++) {
    JLabel label = new JLabel("Label" + i);
    EmptyBorder border = new EmptyBorder(5, 20, 5, 20);
    label.setBorder(border);
    panel.add(label);
}

Если вы хотите использовать LineBorder и EmptyBorder для полей, вы можете использовать CompoundBorder

Составной класс Border, используемый для объединения двух объектов Border в одну границу путем вложения внутреннего объекта Border во вставки внешнего объекта Border. Например, этот класс можно использовать для добавления пустого поля к компоненту с существующей декоративной рамкой:

Пример CompoundBorder

JPanel panel = new JPanel();
EmptyBorder border = new EmptyBorder(5, 20, 5, 20);
LineBorder line = new LineBorder(Color.blue, 2, true);
CompoundBorder compound = new CompoundBorder(line, border);
for (int i = 0; i < 10; i++) {
    JLabel label = new JLabel("Label" + i);
    label.setBorder(compound);
    panel.add(label);
}

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

Научитесь использовать различные менеджеры компоновки в разделе Размещение компонентов внутри контейнера


Полный пример использования CompoundBorder и GridLayout(int rows, int cols, int hgap, int vgap)

введите здесь описание изображения

import java.awt.Color;
import java.awt.GridLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.border.CompoundBorder;
import javax.swing.border.EmptyBorder;
import javax.swing.border.LineBorder;

public class CompoundBorderDemo {

    public CompoundBorderDemo() {
        JFrame frame = new JFrame();
        JPanel panel = createPanel();
        frame.add(panel);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }

    private JPanel createPanel() {
        JPanel panel = new JPanel(new GridLayout(5, 5, 10, 10));
        EmptyBorder panelBorder = new EmptyBorder(10, 10, 10, 10);
        panel.setBorder(panelBorder);
        EmptyBorder border = new EmptyBorder(5, 20, 5, 20);
        LineBorder line = new LineBorder(Color.blue, 2, true);
        CompoundBorder compound = new CompoundBorder(line, border);
        for (int i = 0; i < 25; i++) {
            JLabel label = new JLabel("Label" + i);
            label.setBorder(compound);
            panel.add(label);
        }
        return panel;
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                new CompoundBorderDemo();
            }
        });
    }
}
person Paul Samsotha    schedule 26.03.2014
comment
я использовал пример компаундбордера, он не создает никаких jlable во время выполнения - person user3456343; 26.03.2014
comment
Если вы установите для макета значение null, вы должны удалить его. нулевые макеты требуют установки границ, что я не рекомендую - person Paul Samsotha; 26.03.2014
comment
Также JFrame имеет BorderLayout по умолчанию. Вы не можете просто add добавить к нему несколько компонентов, иначе появится только один. Вместо этого добавьте метки на панель с раскладкой потока по умолчанию и добавьте панель во фрейм. - person Paul Samsotha; 26.03.2014
comment
я не использую нулевой макет - person user3456343; 26.03.2014
comment
Хорошо, посмотрите мой пример, который я только что опубликовал - person Paul Samsotha; 26.03.2014
comment
Если вы хотите добавить метки непосредственно к фрейму, вам нужно изменить макет фрейма. Вы можете сделать это, щелкнув правой кнопкой мыши на рамке и выбрав Установить макет. Или вы можете просто перетащить JPanel для фрейма и установить макет этой панели, а затем добавить метки на панель. - person Paul Samsotha; 26.03.2014
comment
еще один вопрос: как я могу начать создавать метку из указанного места - person user3456343; 26.03.2014
comment
Вы используете инструмент GUI Builder, почему бы просто не разместить их вручную там, где вы хотите? Вот для чего предназначен этот инструмент. GroupLayout позволяет вам сделать это. Если вы хотите передать код вручную, вам следует использовать соответствующие менеджеры компоновки. Вы можете вложить несколько панелей с разными менеджерами компоновки, чтобы получить желаемый результат. Также посмотрите на GridBagLayout для большей точности. Кроме этого, я действительно не могу предложить гораздо больше помощи. Если вам нужно точное позиционирование, вам нужен нулевой макет, где вы можете установить границы, но я ни в коем случае не рекомендую это. - person Paul Samsotha; 26.03.2014
comment
Как я могу добавить jpanel в заданную позицию - person user3456343; 26.03.2014
comment
Вы используете инструмент GUI Builder, не так ли? Просто перетащите его. - person Paul Samsotha; 26.03.2014
comment
То, что вы хотите сделать с панелью, которую вы перетаскиваете, — это просто добавить к ней новую панель. Панель, которую вы перетаскиваете, уже должна иметь местоположение, поэтому вам не нужно ее устанавливать. Вместо этого установите макет панели, которую вы перетащили, на BorderLayout. Затем создайте новую JPanel с помощью этого метода и добавьте эту панель к той, которую вы перетащили - person Paul Samsotha; 26.03.2014
comment
я хочу поместить ваш код только в эту панель - person user3456343; 26.03.2014
comment
Я знаю, так что оставь метод таким, каким он был у меня. Не меняйте его вообще. Затем JPanel panel = createPanel(); jPanel1.setLayout(new GridBagLayout()); jPanel1.add(panel); - person Paul Samsotha; 26.03.2014
comment
или jPanel1.setLayout(new BorderLayout());. BorderLayout растянет panel по размеру, GridBagLayout будет соблюдать предпочтительный размер panel - person Paul Samsotha; 26.03.2014
comment
Кроме того, почему вы создаете еще один кадр. Ваш класс уже является фреймом. Уберите весь этот код кадра. - person Paul Samsotha; 26.03.2014
comment
я сделал эту панель JPanel = createPanel(); jPanel1.setLayout(новый GridBagLayout()); jPanel1.добавить (панель); - person user3456343; 26.03.2014
comment
Вы изменили метод на прежний? Я вижу в вашем коде, что вы его изменили. И это jPanel1 панель, которую вы перетаскиваете? Он отлично работает для меня. Я только что проверил это с помощью GUI Builder. - person Paul Samsotha; 26.03.2014
comment
я не делал никаких изменений в методе - person user3456343; 26.03.2014
comment
я внес изменения в конструктор - person user3456343; 26.03.2014
comment
Вы ДЕЙСТВИТЕЛЬНО внесли изменения. Вы изменили JPanel panel на jPanel1 и все остальные. - person Paul Samsotha; 26.03.2014
comment
@peeskillet нет, он/она ждет чуда +1 - person mKorbel; 26.03.2014
comment
Это будет последний комментарий, который я вам дам. Я не служба поддержки, извините. Итак, 1. Начните все сначала, создав новую JFrame форму. 2. Перетащите к нему JPanel (jPanel1) 3. Скопируйте и вставьте мой метод из этого ответа точно и не изменяйте его . 4. в конструкторе используйте JPanel panel = createPanel(); jPanel1.setLayout(new GridBagLayout()); jPanel1.add(panel);. Это должно работать, так как я только что проверил это. До свидания и с Богом. - person Paul Samsotha; 26.03.2014
comment
@peeskillet извините за беспокойство, но я слишком запутался, можете ли вы прислать более конкретный код - person user3456343; 26.03.2014
comment
я делаю именно здесь, не работает только jPanel1.add(panel); - person user3456343; 26.03.2014
comment
@peeskillet помоги мне, у меня тут проблемы jPanel1.setLayout(new GridBagLayout()); jPanel1.добавить (панель); - person user3456343; 26.03.2014
comment
Вы должны сделать это после initComponents. initComponent - это место, где jPanel1 инициализируется. Также убедитесь, что ваша панель, которую вы перетащили, действительно называется jPanel1. Это все основные вещи. Если вы не можете понять это отсюда, извините, но я больше не могу вам помочь. - person Paul Samsotha; 26.03.2014

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

это самое простое решение вашей проблемы. Макет сетки может подойти вам лучше.

обратитесь к ссылкам ниже для этого ..

СЕТОЧНЫЙ МАКЕТ

person Prakash    schedule 26.03.2014