Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.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 如何向方法添加gui元素并调用它们?_Java_Swing_User Interface_Methods - Fatal编程技术网

Java 如何向方法添加gui元素并调用它们?

Java 如何向方法添加gui元素并调用它们?,java,swing,user-interface,methods,Java,Swing,User Interface,Methods,这正如预期的那样工作,但我只是想知道如何清理它,以便我可以将三个面板(inputPanel、buttonPanel和outputPanel)中的每一个放入它们自己的方法中,然后从那里调用它们。例如,我不想在最后4种方法中都重新创建outputPanel 提前感谢您的帮助 public static void main(String[] args) { int inputMin = 0, inputMax = 0; JPanel inputPanel = new JPanel()

这正如预期的那样工作,但我只是想知道如何清理它,以便我可以将三个面板(inputPanel、buttonPanel和outputPanel)中的每一个放入它们自己的方法中,然后从那里调用它们。例如,我不想在最后4种方法中都重新创建outputPanel

提前感谢您的帮助

public static void main(String[] args) {
    int inputMin = 0, inputMax = 0;

    JPanel inputPanel = new JPanel();
    JTextField Min = new JTextField(5);
    JTextField Max = new JTextField(5);
    inputPanel.add(new JLabel("Min: "));
    inputPanel.add(Min);
    inputPanel.add(new JLabel("Max: "));
    inputPanel.add(Max);

    JPanel buttonPanel = new JPanel();
    buttonPanel.setLayout(new BoxLayout(buttonPanel, BoxLayout.Y_AXIS));
    JRadioButton Primes = new JRadioButton("Primes");
    JRadioButton Palindromes = new JRadioButton("Palindromes");
    JRadioButton Emirps = new JRadioButton("Emirps");
    JRadioButton Twins = new JRadioButton("Twin Primes");
    JRadioButton All = new JRadioButton("All");
    buttonPanel.add(Primes);
    buttonPanel.add(Palindromes);
    buttonPanel.add(Emirps);
    buttonPanel.add(Twins);
    buttonPanel.add(All);

    for (int i = 0; i >= 0; i++) {
        JOptionPane.showConfirmDialog(null, inputPanel,
                "Enter Range 1 - 10000", JOptionPane.PLAIN_MESSAGE);
        inputMin = Integer.parseInt(Min.getText());
        inputMax = Integer.parseInt(Max.getText());

        if ((inputMin >= 1) && (inputMax <= 10000) && 
                (inputMax > inputMin)) {
            break;
        } else {
            JOptionPane.showMessageDialog
            (null, "Invalid input. Please try again.", 
                    "Error", JOptionPane.ERROR_MESSAGE);
            i++;
        }
    }

    JOptionPane.showConfirmDialog(null, buttonPanel,
            "Choose Output", JOptionPane.PLAIN_MESSAGE);

    if (Primes.isSelected()) {
        primes(inputMin, inputMax);
    } else if (Palindromes.isSelected()) {
        palindromes(inputMin, inputMax);
    } else if (Emirps.isSelected()) {
        emirps(inputMin, inputMax);
    } else if (Twins.isSelected()) {
        twins(inputMin, inputMax);
    } else if (All.isSelected()) {
        primes(inputMin, inputMax);
        palindromes(inputMin, inputMax);
        emirps(inputMin, inputMax);
        twins(inputMin, inputMax);
    }
System.exit(0);
}

public static void primes(int inputMin, int inputMax) {
    JPanel outputPanel = new JPanel();
    JTextArea outputText = new JTextArea();
    outputText.setPreferredSize(new Dimension(400, 100));
    outputText.setLineWrap(true);
    outputText.setWrapStyleWord(true);
    JScrollPane thing = new JScrollPane(outputText);
    outputPanel.add(thing);

    int i, j, run;
    boolean prime;
    outputText.setText("The first 50 prime numbers between "
            + inputMin + " and " + inputMax + " are:\n");
    for (i = inputMin, run = 0; i <= inputMax; i++) {
        prime = true;
        if (i == 1) {
            i++;
        }
        if (i == 2) {
            outputText.append(i + ", ");
            i++;
        }
        for (j = 2; j <= Math.sqrt(i); j++) {
            if (i % j == 0) {
                prime = false;
            }
        }
        if (prime) {
            outputText.append(i + ", ");
            i++;
            run++;
            if (run == 50) {
                break;
            }
        }
    }
    JOptionPane.showConfirmDialog(null, outputPanel,
            "Primes", JOptionPane.PLAIN_MESSAGE);
}

public static void palindromes(int inputMin, int inputMax) {
    JPanel outputPanel = new JPanel();
    JTextArea outputText = new JTextArea();
    outputText.setPreferredSize(new Dimension(400, 100));
    outputText.setLineWrap(true);
    outputText.setWrapStyleWord(true);
    JScrollPane thing = new JScrollPane(outputText);
    outputPanel.add(thing);

    int i, j, run;
    boolean prime;
    outputText.setText("The first 20 palindromic prime numbers between "
            + inputMin + " and " + inputMax + " are:\n");
    for (i = inputMin, run = 0; i <= inputMax; i++) {
        prime = true;
        if (i == 1) {
            i++;
        }
        if (i == 2) {
            outputText.append(i + ", ");
            i++;
        }
        for (j = 2; j <= Math.sqrt(i); j++) {
            if (i % j == 0) {
                prime = false;
            }
        }
        if (prime) {
            String number = Integer.toString(i);
            int reverse = Integer.parseInt
            (new StringBuffer(number).reverse().toString());
            if (reverse == i) {
                outputText.append(i + ", ");
                i++;
                run++;
                if (run == 20) {
                    break;
                }
            }
        }
    }
    JOptionPane.showConfirmDialog(null, outputPanel,
            "Palindromic Primes", JOptionPane.PLAIN_MESSAGE);
}

public static void emirps(int inputMin, int inputMax) {
    JPanel outputPanel = new JPanel();
    JTextArea outputText = new JTextArea();
    outputText.setPreferredSize(new Dimension(400, 100));
    outputText.setLineWrap(true);
    outputText.setWrapStyleWord(true);
    JScrollPane thing = new JScrollPane(outputText);
    outputPanel.add(thing);

    int i, j, run;
    boolean prime;
    outputText.setText("The first 20 emirps between "
            + inputMin + " and " + inputMax + " are:\n");
    for (i = inputMin, run = 0; i <= inputMax; i++) {
        prime = true;
        for (j = 2; j <= Math.sqrt(i); j++) {
            if (i % j == 0) {
                prime = false;
            }
        }
        if (prime) {
            String number = Integer.toString(i);
            int reverse = Integer.parseInt
            (new StringBuffer(number).reverse().toString());
            for (j = 2; j <= Math.sqrt(reverse); j++) {
                if (reverse % j == 0) {
                    prime = false;
                }
            }
            if ((prime) && (i != reverse)
                    && (i < reverse) && (reverse <= inputMax)) {
                outputText.append(i + " and " + reverse + ", ");
                run++;
                if (run == 20) {
                    break;
                }
            }
        }
    }
    JOptionPane.showConfirmDialog(null, outputPanel,
            "Emirps", JOptionPane.PLAIN_MESSAGE);
}

public static void twins(int inputMin, int inputMax) {
    JPanel outputPanel = new JPanel();
    JTextArea outputText = new JTextArea();
    outputText.setPreferredSize(new Dimension(400, 100));
    outputText.setLineWrap(true);
    outputText.setWrapStyleWord(true);
    JScrollPane thing = new JScrollPane(outputText);
    outputPanel.add(thing);

    int i, j, run;
    boolean prime;
    outputText.setText("The first 20 twin primes between "
            + inputMin + " and " + inputMax + " are:\n");
    for (i = inputMin, run = 0; i <= inputMax; i++) {
        prime = true;
        if (i == 1) {
            i++;
        }
        for (j = 2; j <= Math.sqrt(i); j++) {
            if (i % j == 0) {
                prime = false;
            }
        }
        if (prime) {
            int twin = i + 2;
            for (j = 2; j <= Math.sqrt(twin); j++) {
                if (twin % j == 0) {
                    prime = false;
                }
            }
            if (prime) {
                outputText.append(i + " and " + twin + ", ");
                run++;
                if (run == 20) {
                    break;
                }
            }
        }
    }
    JOptionPane.showConfirmDialog(null, outputPanel,
            "Twin Primes", JOptionPane.PLAIN_MESSAGE);
}
publicstaticvoidmain(字符串[]args){
int-inputMin=0,inputMax=0;
JPanel inputPanel=新的JPanel();
JTextField Min=新的JTextField(5);
JTextField Max=新的JTextField(5);
添加(新的JLabel(“Min:”);
输入面板。添加(最小值);
添加(新JLabel(“Max:”);
inputPanel.add(最大值);
JPanel buttonPanel=新的JPanel();
buttonPanel.setLayout(新的BoxLayout(buttonPanel,BoxLayout.Y_轴));
JRadioButton Primes=新的JRadioButton(“Primes”);
JRadioButton回文=新的JRadioButton(“回文”);
JRadioButton Emirps=新的JRadioButton(“Emirps”);
JRadioButton Twins=新的JRadioButton(“孪生素数”);
JRadioButton All=新的JRadioButton(“全部”);
按钮面板。添加(素数);
添加(回文);
按钮面板添加(Emirps);
按钮面板。添加(双胞胎);
按钮面板。添加(全部);
对于(int i=0;i>=0;i++){
JOptionPane.showConfirmDialog(null,inputPanel,
“输入范围1-10000”,JOptionPane.普通消息);
inputMin=Integer.parseInt(Min.getText());
inputMax=Integer.parseInt(Max.getText());
如果((inputMin>=1)和&(inputMax inputMin)){
打破
}否则{
JOptionPane.showMessageDialog
(null,“输入无效。请重试。”,
“错误”,作业窗格。错误消息);
i++;
}
}
JOptionPane.showConfirmDialog(null,buttonPanel,
“选择输出”,JOptionPane。普通消息);
if(Primes.isSelected()){
素数(inputMin,inputMax);
}else if(回文.isSelected()){
回文(inputMin,inputMax);
}else if(Emirps.isSelected()){
emirps(输入最小值、输入最大值);
}else if(Twins.isSelected()){
双胞胎(inputMin,inputMax);
}else if(All.isSelected()){
素数(inputMin,inputMax);
回文(inputMin,inputMax);
emirps(输入最小值、输入最大值);
双胞胎(inputMin,inputMax);
}
系统出口(0);
}
公共静态空素数(int-inputMin,int-inputMax){
JPanel outputPanel=新的JPanel();
JTextArea outputText=新的JTextArea();
outputText.setPreferredSize(新维度(400100));
outputText.setLineWrap(真);
outputText.setWrapStyleWord(真);
JScrollPane thing=新的JScrollPane(outputText);
outputPanel.add(东西);
int i,j,run;
布尔素数;
outputText.setText(“之间的前50个素数”
+inputMin+”和“+inputMax+”是:\n”);
对于(i=inputMin,run=0;i)您可以
创建一个“助手”方法来创建有问题的面板,例如

public static void main(String[] args) {
    //..
    JPanel inputPanel = createInputPane();
    //...
}

public JPanel createInputPane() {
    JPanel inputPanel = new JPanel();
    JTextField Min = new JTextField(5);
    JTextField Max = new JTextField(5);
    inputPanel.add(new JLabel("Min: "));
    inputPanel.add(Min);
    inputPanel.add(new JLabel("Max: "));
    inputPanel.add(Max);
    return inputPanel;
}
这样做的问题是,如果您需要访问面板上包含的字段,它会变得很麻烦

你可以 创建一个自定义面板,提供所需的基本控件和访问功能

public class InputPane extends JPanel {

    private final JTextField minField;
    private final JTextField maxField;

    public InputPane() {
        minField = new JTextField(5);
        maxField = new JTextField(5);
        add(new JLabel("Min: "));
        add(minField);
        add(new JLabel("Max: "));
        add(maxField);
    }

    public String getMaxValue() {
        return maxField.getText();
    }

    public String getMinValue() {
        return minField.getText();
    }

    public void setMaxValue(String value) {
        maxField.setText(value);
    }

    public void setMinValue(String value) {
        minField.setText(value);
    }

}

然后,只要在需要时创建一个新实例即可。

1)摆脱代码中的大部分静态内容。2)使用实例字段和方法创建真正的诚实善良的对象。如果这是我的代码,老实说,我会把它拿出来,然后重新开始,但首先将我的逻辑写在纸上,使其正确,然后创建对象,首先是非GUI,然后是GUI,然后构建我的项目。我可能应该补充一点,我是CS第一学期的学生,对Java非常陌生。你要求改进,你就是这样。改进。创建对象。那么为什么不创建一个方法,把你用来创建窗格的代码放在其中,然后返回面板呢?另外,作为对纸上逻辑的回应:这个程序已经完成了我在需要它去做;它在概念上没有什么问题。我只是想寻求帮助,了解从何处着手,特别是在正确使用GUI的方向上。输入、数学和输出都能正确工作。这非常有帮助,让我的大脑朝着正确的方向滚动。我的大问题是需要访问fiel谢谢!