Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Jframe或Jpanel上格式化多个复选框_Java_Swing_Awt_Layout Manager_Jcheckbox - Fatal编程技术网

Java 在Jframe或Jpanel上格式化多个复选框

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

我已经有一系列句子了。所以我需要把每个句子都放在一个复选框中。复选框的数量取决于向量大小的数量。例如,我有50个句子,所以我需要50个复选框。然后用户可以在文本文件中检查所需的句子。 下面的类(ViewerFrame)应该构建一个框架,使其具有许多复选框,这些复选框与数组列表(ManualSummarySys.句)中的句子数相同。类(ManualSummarySys)工作正常

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