我正在使用的当前布局只是水平的拆分窗格,左侧是复选框,将输出右侧。在用户检查所有需要的项目之后,我最终将在左侧添加一个提交按钮,然后将结果显示在右侧。当前的问题是,我什至无法显示背景色,并且复选框添加了怪异的颜色。在某些时候,我只能在左侧面板中看到一个复选框,但不确定为什么,并且还将每个容器设置为可见,但仍然看不到。我将它们添加到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();
}
}
答案 0 :(得分: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);
}
}
仅允许在五个可用位置中的任何一个位置管理单个组件。相反,您需要将复选框添加到拆分窗格中的一个容器中。
driver = webdriver.Chrome(options=chrome_options)