Java 在Jframe或Jpanel上格式化多个复选框
我已经有一系列句子了。所以我需要把每个句子都放在一个复选框中。复选框的数量取决于向量大小的数量。例如,我有50个句子,所以我需要50个复选框。然后用户可以在文本文件中检查所需的句子。 下面的类(ViewerFrame)应该构建一个框架,使其具有许多复选框,这些复选框与数组列表(ManualSummarySys.句)中的句子数相同。类(ManualSummarySys)工作正常Java 在Jframe或Jpanel上格式化多个复选框,java,swing,awt,layout-manager,jcheckbox,Java,Swing,Awt,Layout Manager,Jcheckbox,我已经有一系列句子了。所以我需要把每个句子都放在一个复选框中。复选框的数量取决于向量大小的数量。例如,我有50个句子,所以我需要50个复选框。然后用户可以在文本文件中检查所需的句子。 下面的类(ViewerFrame)应该构建一个框架,使其具有许多复选框,这些复选框与数组列表(ManualSummarySys.句)中的句子数相同。类(ManualSummarySys)工作正常 public class ViewerFrame { import java.awt.BorderLayout ; i
public class ViewerFrame {
import java.awt.BorderLayout ;
import java.awt.Font ;
import java.awt.GridLayout ;
import java.awt.ScrollPane ;
import java.awt.event.ActionEvent ;
import java.awt.event.ActionListener ;
import java.util.ArrayList ;
import java.util.List ;
import javax.swing.ButtonGroup ;
import javax.swing.JButton ;
import javax.swing.JCheckBox ;
import javax.swing.JComboBox ;
import javax.swing.JFrame ;
import javax.swing.JLabel ;
import javax.swing.JPanel ;
import javax.swing.JRadioButton ;
import javax.swing.border.EtchedBorder ;
import javax.swing.border.TitledBorder ;
import javax.swing.plaf.metal.MetalBorders ;
public class ViewerFrame extends JFrame {
private static final int FRAME_WIDTH = 10;
private static final int FRAME_HEIGHT = 5;
private JLabel sampleField;
private List<JCheckBox> checkboxes = new ArrayList<JCheckBox>();
private ActionListener listener;
public ViewerFrame() {
sampleField = new JLabel("choose your prefered sentences");
add(sampleField, BorderLayout.WEST);
class ChoiceListener implements ActionListener {
public void actionPerformed(ActionEvent event) {
}
}
listener = new ChoiceListener();
createControlPanel();
setSize(FRAME_WIDTH, FRAME_HEIGHT);
add(this.createCheckBoxes());
}
public void createControlPanel() {
JFrame sizeGroupPanel = createCheckBoxes();
JPanel controlPanel = new JPanel();
controlPanel.setLayout(new GridLayout(3, 1));
controlPanel.add(sizeGroupPanel);
controlPanel.add(styleGroupPanel);
add(controlPanel, BorderLayout.LINE_START);
}
public JFrame createCheckBoxes() {
JFrame frame = new JFrame("Sentences");
frame.setBorder(new TitledBorder(new EtchedBorder(), "Sentences"));
for (int i = 0; i < ManualSummarySys.sentences.size(); i++) {
JCheckBox checkbox = new JCheckBox(ManualSummarySys.sentences.get(i));
checkboxes.add(checkbox);
checkbox.addActionListener(listener);
frame.add(checkbox);
}
return frame;
}
}
public类ViewerFrame{
导入java.awt.BorderLayout;
导入java.awt.Font;
导入java.awt.GridLayout;
导入java.awt.ScrollPane;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入java.util.ArrayList;
导入java.util.List;
导入javax.swing.ButtonGroup;
导入javax.swing.JButton;
导入javax.swing.JCheckBox;
导入javax.swing.JComboBox;
导入javax.swing.JFrame;
导入javax.swing.JLabel;
导入javax.swing.JPanel;
导入javax.swing.JRadioButton;
导入javax.swing.border.EtchedBorder;
导入javax.swing.border.TitledBorder;
导入javax.swing.plaf.metal.MetalBorders;
公共类ViewerFrame扩展了JFrame{
专用静态最终整数帧_宽度=10;
专用静态最终整数帧_高度=5;
私人JLabel样本场;
私有列表复选框=新建ArrayList();
私人行动听者;
公共ViewerFrame(){
sampleField=newjlabel(“选择你喜欢的句子”);
添加(样本场,BorderLayout.WEST);
类ChoiceListener实现ActionListener{
已执行的公共无效操作(操作事件){
}
}
listener=新的ChoiceListener();
createControlPanel();
设置尺寸(框宽、框高);
添加(this.createCheckbox());
}
public void createControlPanel(){
JFrame sizeGroupPanel=CreateCheckbox();
JPanel controlPanel=新的JPanel();
设置布局(新的网格布局(3,1));
添加(sizeGroupPanel);
添加(样式组面板);
添加(控制面板、边框布局、行_开始);
}
公共JFrame CreateCheckbox(){
JFrame=新的JFrame(“句子”);
frame.setOrder(新标题边框(新蚀刻边框(),“句子”);
对于(int i=0;i
为什么createcheckbox()
返回一个包含所有内容的JFrame?然后将此JFrame添加到另一个JFrame?抱歉,这毫无意义
就我个人而言,如果我想显示一堆这样的复选框,我会使用放置在JTable中的DefaultTableModel。一列是复选框的布尔列,另一列是文本行的字符串列。您
从JFrame
扩展,这通常是不可取的,但让我们从这个
然后调用createControlPanel
,它调用createcheckbox
,创建一个新的JFrame
在createcheckbox
中,使用默认的BorderLayout
设置此框架的布局管理器失败,这意味着只有一个复选框实际可见(最后添加的一个)
回到createControlPanel
中,您尝试将在createcheckbox
中创建的框架添加到一个面板。您还尝试添加一个名为styleGroupPanel
的对象,我在您的代码中找不到该对象的引用
回到构造函数中,调用setSize
,这通常是不可取的,而应该使用pack
最后,再次调用createCheckBoxes
,并尝试向帧添加帧
您不能将窗口添加到任何其他内容。与其尝试在createCheckBoxes
中创建另一个窗口,为什么不直接返回JPanel
?好的,如果有类似问题,我将粘贴此代码。请注意,此处-滚动窗格中包含JPanel,并且滚动窗格在o JDialog(或showConfirmDialog)上的用户。在复选框列表顶部还有“全选”复选框
公共类测试实现ItemListener{
List<String> testset;
JCheckBox selectallcheckbox = new JCheckBox();
List<JCheckBox> testscheckboxes = new ArrayList<JCheckBox>();
List<String> cancel = Arrays.asList("cancel");
public UserInputTest(List<String> tests) {
this.testset = tests;
}
public List<String> GetCheckBoxes() {
// Create Content Pane as JScrollPane and adding JPanel into scroll pane.
JPanel testspanel = new JPanel();
testspanel.setLayout(new BoxLayout(testspanel, BoxLayout.Y_AXIS));
JScrollPane pane = new JScrollPane(testspanel,
JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
pane.setMinimumSize(new Dimension(400, 400));
pane.setPreferredSize(new Dimension(400, 500));
// Create Swing Components and adding them to JPanel
selectallcheckbox.setText("Select All");
selectallcheckbox.setSelected(false);
selectallcheckbox.addItemListener(this);
testspanel.add(selectallcheckbox, 0);
testspanel.add(Box.createVerticalGlue());
// Adding each element from string list to one checkbox into the JPanel
for(int i = 0; i < testset.size() ; i++) {
JCheckBox testcheckbox = new JCheckBox();
testcheckbox.setText(testset.get(i));
testcheckbox.setSelected(false);
//testspanel.setComponentZOrder(testcheckbox, i+1);
testspanel.add(testcheckbox, i+1);
testspanel.add(Box.createVerticalGlue());
testscheckboxes.add(i, testcheckbox);
}
int x = JOptionPane.showConfirmDialog(null, pane, "Select Tests", JOptionPane.OK_CANCEL_OPTION);
List<String> InputTestDetails = new ArrayList<String>();
if (x == JOptionPane.OK_OPTION) {
for(JCheckBox getvaluechkbox : testscheckboxes) {
if(getvaluechkbox.isSelected()) {
InputTestDetails.add(getvaluechkbox.getText());
}
}
return InputTestDetails;
}
else if (x == JOptionPane.CANCEL_OPTION) {
return cancel;
}
return cancel;
}
@Override
public void itemStateChanged(ItemEvent e) {
if(e.getSource() == selectallcheckbox) {
if(selectallcheckbox.isSelected() == true){
for(JCheckBox setchkbox : testscheckboxes) {
setchkbox.setSelected(true);
}
}
else {
for(JCheckBox setchkbox : testscheckboxes) {
setchkbox.setSelected(false);
}
}
}
}
列出测试集;
JCheckBox selectallcheckbox=新建JCheckBox();
List testscheckbox=new ArrayList();
List cancel=Arrays.asList(“取消”);
公共用户输入测试(列表测试){
this.testset=测试;
}
公共列表获取复选框(){
//将内容窗格创建为JScrollPane,并将JPanel添加到滚动窗格中。
JPanel testspanel=新的JPanel();
testspanel.setLayout(新的BoxLayout(testspanel,BoxLayout.Y_轴));
JScrollPane=新的JScrollPane(testspanel,
JScrollPane.VERTICAL\u滚动条\u始终,
JScrollPane.水平滚动条(根据需要);
窗格。设置最小尺寸(新尺寸(400400));
窗格。设置首选尺寸(新尺寸(400500));
//创建Swing组件并将其添加到JPanel
selectallcheckbox.setText(“全选”);
selectallcheckbox.setSelected(false);
选择AllCheckbox.addItemListener(此);
testspanel.add(选择所有复选框,0);
testspanel.add(Box.createVerticalGlue());
//将字符串列表中的每个元素添加到JPanel中的一个复选框中
对于(int i=0;i