当前位置: 首页 > 知识库问答 >
问题:

如何从ButtonGroup中保存选定的JRadioButton?

邹禄
2023-03-14

我的程序试图保存按钮组的状态,以便在程序结束时将其写入文件,或者在用户选择“返回”时恢复到按钮。

我以前发现过这个问题:

如何从按钮组中选择哪个JRadioButton

但是,我下面的代码在编译为ButtonGroup时出错,在ActionPerformed方法中使用时无法识别。

    import javax.swing.*;
    import java.awt.FlowLayout;
    import java.awt.event.ActionListener;
    import java.awt.event.ActionEvent;
    import java.util.Enumeration;

    public class GraphicalInterface implements ActionListener
    {
        private static String[] tweetList =
        {"/Users/Chris/Desktop/Code/Tweets/One.jpg", "/Users/Chris/Desktop/Code/Tweets/Two.jpg", "/Users/Chris/Desktop/Code/Tweets/Three.jpg",
        "/Users/Chris/Desktop/Code/Tweets/Four.jpg", "/Users/Chris/Desktop/Code/Tweets/Five.jpg", "/Users/Chris/Desktop/Code/Tweets/Six.jpg",
        "/Users/Chris/Desktop/Code/Tweets/Seven.jpg", "/Users/Chris/Desktop/Code/Tweets/Eight.jpg"};

        private int[] answers = {4, 4, 4, 4, 4, 4, 4, 4};
        private int currentTweet = 0;

        JFrame surveyFrame = new JFrame("User Survey");
        JPanel surveyPanel = new JPanel(new FlowLayout());

        JButton buttonBack = new JButton("Back");
        JButton buttonNext = new JButton("Next");
        JButton buttonFinish = new JButton("Finish");

        JRadioButton cred1 = new JRadioButton("Extrememly Credible");
        JRadioButton cred2 = new JRadioButton("Credible");
        JRadioButton cred3 = new JRadioButton("Somewhat Credible");
        JRadioButton cred4 = new JRadioButton("Undecided");
        JRadioButton cred5 = new JRadioButton("Somewhat Incredible");
        JRadioButton cred6 = new JRadioButton("Incredible");
        JRadioButton cred7 = new JRadioButton("Extrememly Incredible");

        JLabel tweetLabel = new JLabel(new ImageIcon(tweetList[currentTweet]));

        public void Interface()
        {
            surveyFrame.setVisible(true);
            surveyFrame.setSize(500, 350);
            surveyFrame.add(surveyPanel);
            surveyFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

            surveyPanel.add(tweetLabel);
            surveyPanel.add(buttonNext);
            surveyPanel.add(buttonBack);
            surveyPanel.add(buttonFinish);
            surveyPanel.add(cred1);
            surveyPanel.add(cred2);
            surveyPanel.add(cred3);
            surveyPanel.add(cred4);
            surveyPanel.add(cred5);
            surveyPanel.add(cred6);
            surveyPanel.add(cred7);
            cred4.setSelected(true);

            ButtonGroup tweetCredibility = new ButtonGroup();
            tweetCredibility.add(cred1);
            tweetCredibility.add(cred2);
            tweetCredibility.add(cred3);
            tweetCredibility.add(cred4);
            tweetCredibility.add(cred5);
            tweetCredibility.add(cred6);
            tweetCredibility.add(cred7);

            buttonNext.addActionListener(this);
            buttonBack.addActionListener(this);
            buttonFinish.addActionListener(this);
        }

        public void actionPerformed(ActionEvent input)
        {
            Object source = input.getSource();

            if (source == buttonNext)
            {
                if (currentTweet < tweetList.length-1)
                {
                    answers[currentTweet] = getCredRating(tweetCredibility);
                    currentTweet++;
                    ImageIcon nextTweet = new ImageIcon(tweetList[currentTweet]);
                    tweetLabel.setIcon(nextTweet);
                    // restore button from next image
                }
            }

            if (source == buttonBack)
            {
                if (currentTweet > 0)
                {
                    answers[currentTweet] = getCredRating(tweetCredibility);
                    currentTweet--;
                    ImageIcon nextTweet = new ImageIcon(tweetList[currentTweet]);
                    tweetLabel.setIcon(nextTweet);
                    // restore button from previous image
                }
            }

            if (source == buttonFinish)
            {
                // save answers to file
            }
        }

        public int getCredRating(ButtonGroup input)
        {
            int n = 1;
            for (Enumeration<AbstractButton> buttons = input.getElements(); buttons.hasMoreElements(); n++)
            {
                AbstractButton button = buttons.nextElement();
                if (button.isSelected())
                {
                    return n;
                }
            }
        }
    }

补丁:找不到变量推文可信度

知道为什么会这样吗?

谢谢

共有1个答案

能文华
2023-03-14
ButtonGroup tweetCredibility = new ButtonGroup();

将ButtonGroup定义为局部变量。只有GraphicalInterface()构造函数知道这一点。

您需要将按钮组定义为实例变量,以便该类的任何方法都可以使用它。因此,在定义JRadioButtons的地方定义ButtonGroup。

还有,surveyFrame。setVisibe(true)语句应在所有组件添加到框架后作为构造函数的最后一条语句调用。

 类似资料:
  • 问题内容: 我有一个包含窗体上的单选按钮的swing应用程序。我有但是,望着可用的方法,我似乎不能得到所选择的名称。到目前为止,我可以说的是: 在ButtonGroup中,我可以执行来返回。从那里,我可以执行,但似乎并不总是可行。我尝试了不同的测试,但结果却无法预测。 另外,我可以从中获取枚举。但是,然后我将不得不遍历每个按钮,只是检查并查看它是否被选中。 有没有更简单的方法来找出已选择了哪个按钮

  • 在一个项目中,我将ItemListener添加到一组JcheckBox和JRadioButtons中。 我希望当用户单击已经选择的JRadioButton时,它会被取消选择。 因为我知道的唯一方法是获取相应的ButtonGroup,然后调用clearSelection()方法。但在itemStateChanged()方法中,我有JtoggleButton选项=(JtoggleButton)事件。g

  • @覆盖公共void onItemSelected(SelectableItem SelectableItem){ }

  • 在我的程序中,我想让用户能够将一个文件保存到他们选择的目录中。在做了一点研究之后,我发现了这个名为JFileChooser的俏皮类。我想做的是允许用户通过JFileChooser GUI转到他们想要的目录,为他们的文件键入一个名称,并允许他们将他们的文件保存到想要的目录。我试着在网上寻找一个解决方案,如何做到这一点,但几乎在我读到的所有地方,最后的答案都是“现在你必须让你的程序保存文件”,但我不知

  • 好的,所以我已经制作了一个文本编辑器,到目前为止,它可以使用JFileChooser创建新文件和打开文件。 我正在努力做的是让文件的保存工作。每次添加或打开一些文件时,它都会向tabbedpane中添加一个新的选项卡,名称要么是文件1等,要么是打开的文件的名称。 另外,我如何使一个文件的当前选定标签textarea?我试过了,但不行: 所以我需要在textArea中创建一个字符串文件。

  • 我有一个包含10个项目(书名)的Jlist。用户将被允许从10个项目中选择3个。我想将选定的项目保存到3个不同的字符串变量(例如book0、book1、book2等)。 我不知道该怎么做。