Флажки Java Swing в SplitPane - PullRequest
       12

Флажки Java Swing в SplitPane

0 голосов
/ 06 декабря 2018

Текущий макет, который мне нужен, - это просто горизонтальная разделенная панель, где слева находятся флажки, а справа выводится.В конце концов я добавлю кнопку «Отправить» слева после того, как пользователь проверит все нужные элементы, и я покажу результат с правой стороны.В настоящее время проблема заключается в том, что я не могу даже отобразить цвет фона, а флажки добавляют шаткий.В определенные моменты я вижу только один флажок на левой панели, и я не уверен, почему, и я также установил каждый контейнер видимым и все еще не в состоянии видеть его.Я добавляю их в функцию addBoxes.

import java.awt.Color;
import java.util.ArrayList;

import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;

public class CheckBox2 extends JFrame {
        private ArrayList<JCheckBox> boxes = new ArrayList<JCheckBox>();
        JLabel leftLabel;
        JLabel rightLabel;
        JSplitPane splitPane;

    public CheckBox2() {
         leftLabel = new JLabel();
         rightLabel = new JLabel();

        splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, new JScrollPane(leftLabel), new JScrollPane(rightLabel) );
        leftLabel.setBackground(Color.BLUE);
        rightLabel.setBackground(Color.RED);
        leftLabel.setVisible(true);
        rightLabel.setVisible(true);
        splitPane.setVisible(true);
        add(splitPane);



    }

    void addBoxes() {
        int i = 0;

        for ( i = 0; i < 1; i++ ) {
            add(new JCheckBox("word" + i ) );
        }
    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub

        CheckBox2 cb = new CheckBox2();
        cb.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        cb.setSize(340, 340);
        cb.setVisible(true);
        cb.addBoxes();
    }



}

1 Ответ

0 голосов
/ 06 декабря 2018

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

Схемы качания ленивы,Это означает, что до тех пор, пока вы целенаправленно не запустите этап макета, любые изменения не будут отражены в пользовательском интерфейсе (пока не будет запущен этап макета, например изменение размера окна или его отображение в первый раз).

Хотя вы можете вызывать revalidate и repaint для контейнера, который вы меняете, в вашем случае простой вызов setVisible last будет иметь тот же желаемый эффект

Спасибо, так что с этим я 'я просто получаю последний флажок, флажок 9 отображается, но не дает разделенного экрана или цвета: (

Это потому, что JFrame по умолчанию использует BorderLayout, который позволяет толькоодин компонент для управления в любой из пяти доступных позиций. Вместо этого вам нужно добавить флажки к одному из контейнеров в разделенной панели.

SplitPane and checkboxes

import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.util.ArrayList;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;

public class CheckBox2 extends JFrame {

  private ArrayList<JCheckBox> boxes = new ArrayList<JCheckBox>();
  JSplitPane splitPane;

  private JPanel leftPanel;
  private JPanel rightPanel;

  public CheckBox2() {

    leftPanel = new JPanel(new GridBagLayout());
    rightPanel = new JPanel(new GridBagLayout()) {
      @Override
      public Dimension getPreferredSize() {
        return new Dimension(200, 200);
      }
    };

    splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, leftPanel, new JScrollPane(rightPanel));
    leftPanel.setBackground(Color.BLUE);
    rightPanel.setBackground(Color.RED);
    add(splitPane);

    addBoxes();
  }

  void addBoxes() {
    int i = 0;

    GridBagConstraints gbc = new GridBagConstraints();
    gbc.gridwidth = GridBagConstraints.REMAINDER;
    for (i = 0; i < 10; i++) {
      leftPanel.add(new JCheckBox("word" + i), gbc);
    }
  }

  public static void main(String[] args) {
    // TODO Auto-generated method stub

    CheckBox2 cb = new CheckBox2();
    cb.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    cb.pack();
    cb.setLocationRelativeTo(null);
    cb.setVisible(true);
  }

}
...