我一直在尝试创建一个创建对话框的程序,如果它们是素数,则检查前n个数字(在下面的代码中由int指定),然后将输出打印到窗口中,如下所示:
1 - 是的 2 - 是的 3 - 是的 4 - 错 5 - 真实
等...
我无法弄清楚如何让它变得动态和生动(即刷新),但是另一个论坛上的某人建议使用Jlist并将其设置为内容,我做了(如下所示),但......
代码:
import javax.swing.JOptionPane;
import java.awt.Dimension;
import javax.swing.DefaultListModel;
import javax.swing.JList;
public class main {
@SuppressWarnings("unused")
public static void main(String[] args) {
//make new string jlist, add numstr to it, and set list as contents
of window.
String NumberStr = "";
DefaultListModel<String> listModel = new DefaultListModel<>();
listModel.addElement(NumberStr);
JList<String> list = new JList<>(listModel);
JOptionPane Window = new JOptionPane();
JOptionPane.showMessageDialog(Window, list, "Prime Number Generator",
JOptionPane.CANCEL_OPTION);
Window.setPreferredSize(new Dimension(700,700));
list.setPreferredSize(new Dimension(100, 100));
Window.setVisible(true);
//check if prime, append, update
int y = 0;
int z = 0;
while (y<100){
if (isPrime(z) == true){
NumberStr += z + " true";
} else {
NumberStr += z + " false";
}
y++;
z++;
}
}
public static boolean isPrime (int x){
int i = 1;
boolean result = false;
while (i<=x){
if (i%x<0) {
result = true;
}else{
result = false;;
}
i++;
}
return result;
}
}
答案 0 :(得分:1)
你在这里创建字符串:
while (y<100){
if (isPrime(z) == true){
NumberStr += z + " true";
} else {
NumberStr += z + " false";
}
y++;
z++;
}
但你对它们一无所知,所以什么都不会显示出来。
你想使用JList,然后:
model.addElement(numberStr);
另请注意,
if (isPrime(z) == true){
应该更简单if (isPrime(z)) {
Key是while循环 - 你需要存储在那里创建的字符串:
while (y<100){
if (isPrime(z)){
model.addElement(z + " true");
} else {
model.addElement(z + " false");
}
y++;
z++;
}
更好:
import javax.swing.*;
public class Foo {
public static void main(String[] args) {
DefaultListModel<String> listModel = new DefaultListModel<>();
// get rid of this, doesn't help
// listModel.addElement(numberStr);
JList<String> list = new JList<>(listModel);
// don't restrict the list's size, rather set its row count
// list.setPreferredSize(new Dimension(100, 100));
list.setVisibleRowCount(10);
// check if prime, append, update
int y = 0;
while (y < 100) {
listModel.addElement(String.format("%d %b", y, isPrime(y)));
y++;
}
JOptionPane.showMessageDialog(null, new JScrollPane(list));
}
// simplify
public static boolean isPrime(int x) {
int i = 2;
while (i < x) {
if (x % i == 0) {
return false;
}
i++;
}
return true;
}
}
答案 1 :(得分:0)
我不太清楚你的意思&#34;我什么都不做他们&#34; ...我已经创建了一个模型并在其中添加了Numstr:
DefaultListModel<String> listModel = new DefaultListModel<>();
listModel.addElement(NumberStr);
JList<String> list = new JList<>(listModel);
避风港?