Java 如何向方法添加gui元素并调用它们?
这正如预期的那样工作,但我只是想知道如何清理它,以便我可以将三个面板(inputPanel、buttonPanel和outputPanel)中的每一个放入它们自己的方法中,然后从那里调用它们。例如,我不想在最后4种方法中都重新创建outputPanel 提前感谢您的帮助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()
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谢谢!