-1

私はすでに文のコレクション(リスト)を持っています。そのため、すべての文をチェック ボックスに入れる必要があります。チェック ボックスの数は、Vector Size の数に依存します。たとえば、50 の文があるので、50 個のチェック ボックスが必要です。書きたい文章をテキストファイルにチェックすることができます。次のクラス(ViewerFrame)は、配列リスト(ManualSummarySys.sentences)の文の数と同じ数のチェックボックスを持つフレームを構築することになっています。クラス(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;
    }
}
4

3 に答える 3

3

これは一般的にはお勧めできませんが、これから先に進みextendましょう...JFrame

次に、新しい を作成するcreateControlPanelを呼び出します。createCheckBoxesJFrame

このcreateCheckBoxesフレームのレイアウト マネージャーの設定に失敗すると、デフォルトを使用して、BorderLayout実際には 1 つのチェック ボックスのみが表示されます (最後に追加されたもの)。

createControlPanelで作成したフレームをcreateCheckBoxesパネルに追加してみてください。styleGroupPanelまた、コードのどこにも参照が見つからないというオブジェクトを追加しようとします...

コンストラクターに戻り、 を呼び出しますsetSize。これは一般的にはお勧めできません。代わりに を使用する必要がありますpack

最後に、createCheckBoxesAGAIN を呼び出して、フレームにフレームを追加しようとします。

ウィンドウを他のものに追加することはできません。別のウィンドウを作成しようとする代わりに、代わりにcreateCheckBoxesa を返さないのはなぜJPanelですか?

于 2013-03-18T03:13:38.073 に答える
2

createCheckBoxes()すべてのものの JFrame を返すのはなぜですか? そして、この JFrame を別の JFrame に追加しますか? 申し訳ありませんが、それはまったく意味がありません。

私のお金のために、そのようなチェックボックスの混乱を表示したい場合は、JTable に配置された DefaultTableModel を使用します。1 つの列はチェック ボックスのブール列で、もう 1 つはテキスト行の文字列列です。

于 2013-03-18T02:42:39.597 に答える
0

わかりました、同様の質問を持つ人に役立つ場合は、このコードを貼り付けています。ここで注意してください - スクロール ペインには JPanel が含まれており、スクロール ペインは JDialog (または showConfirmDialog) でユーザーに表示されます。チェックボックスリストの上に「すべて選択」チェックボックスもあります。

public class Test は 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);
            }
        }
    }

}

}

于 2014-10-29T16:21:11.837 に答える