SplitPane中的Java Swing复选框

时间:2018-12-06 03:51:00

标签: java swing pane

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

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

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

虽然您可以在要更改的容器上调用revalidaterepaint,但根据情况,只需最后调用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); } } 仅允许在五个可用位置中的任何一个位置管理单个组件。相反,您需要将复选框添加到拆分窗格中的一个容器中。

SplitPane and checkboxes

driver = webdriver.Chrome(options=chrome_options)