【问题标题】:Java Swing Checkboxes in a SplitPaneSplitPane 中的 Java Swing 复选框
【发布时间】:2018-12-06 03:50:59
【问题描述】:

我所追求的当前布局只是一个水平拆分窗格,左侧是复选框,右侧将被输出。在用户检查所有想要的项目后,我最终会在左侧添加一个提交按钮,我将在右侧显示结果。当前的问题是我什至无法显示背景颜色,并且复选框正在添加不稳定。在某些时候,我只能在左侧面板中看到一个复选框,我不知道为什么,我还将每个容器都设置为可见,但仍然看不到它。我将它们添加到 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();
    }



}

【问题讨论】:

  • 在cb.addBoxes();之后移动cb.setVisible(true);
  • 谢谢,所以我只是得到最后一个复选框,复选框 9 显示,但它没有分屏或显示颜色:(
  • addBoxes 只是将JCheckBoxs 添加到JFrame,它使用BorderLayout,它只能在每个可用位置管理一个组件

标签: java swing pane


【解决方案1】:

首先阅读Laying Out Components Within a Container 和How to Use Split Panes,它们都包含大量示例。

Swing 布局是懒惰的。这意味着除非您有意触发布局传递,否则任何更改都不会反映在 UI 上(直到触发布局传递,例如调整窗口大小或使其首次可见)。

虽然您可以在要更改的容器上调用 revalidate 和 repaint,但在您的情况下,只需最后调用 setVisible 即可获得相同的预期效果

谢谢,所以我只是得到最后一个复选框,复选框 9 显示,但它没有分屏或显示颜色:(

这是因为JFrame 默认使用BorderLayout,它只允许在五个可用位置中的任何位置管理单个组件。相反,您需要将复选框添加到拆分窗格中的容器之一。

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

}

【讨论】:

    猜你喜欢
    • 2023-04-08
    • 1970-01-01
    • 2015-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多