有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在Joptionpane中显示多行?

嗨,我是这个论坛的新成员,也是java的新手,我需要一些关于java入门作业的帮助。我做了大部分的逻辑。问题是要编写一个程序,显示从100到1000的所有数字,每行10个,可以被5和6整除。数字之间只有一个空格。我的教授想把它放在Joptionpane窗口中。当我尝试这样做时,窗口中只会弹出一个答案。如何使我的答案在一行中显示十个,在一个窗口中用一个空格隔开?我的教授希望我们使用一个转义函数来显示答案的行

public class FindFactors {
    public static void main(String[] args) {
        String message = "";
        final int NumbersPerLine = 10;    // Display 10 numbers per line
        int count = 0; // Count the number of numbers divisible by 5 and 6

        // Test all numbers from 100 to 1,000

        for (int i = 100; i <= 1000; i++) {
            // Test if number is divisible by 5 and 6
            message = message + " " + i;
            count++;
            if (count == 10) {
                message = message + "\r\n";
                count = 0;
            }
            if (i % 5 == 0 && i % 6 == 0) {
                count++;    // increment count
                // Test if numbers per line is 10
                if (count % NumbersPerLine == 0)
                    JOptionPane.showMessageDialog(null, i);
                else
                    JOptionPane.showMessageDialog(null, (i + " "));
            }
        }
    }
}

共 (2) 个答案

  1. # 1 楼答案

    AJOptionPane能够显示图像、文本或任何其他组件,对于这种特殊情况,您可能需要创建自己的JPanel,将每一行数字添加到JLabel中,然后将JLabel添加到其中

    import javax.swing.BoxLayout;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JOptionPane;
    import javax.swing.JPanel;
    import javax.swing.SwingUtilities;
    
    public class MultiLineOptionPane {
        private JPanel pane;
    
        public static void main(String[] args) {
            SwingUtilities.invokeLater(new MultiLineOptionPane()::createAndShowGui);
        }
    
        public void createAndShowGui() {
            pane = new JPanel();
            pane.setLayout(new BoxLayout(pane, BoxLayout.PAGE_AXIS));
    
            StringBuilder sb = new StringBuilder(); //This object will be used to concatenate in the next for loop
            for (int i = 0; i < 500; i++) { //Sample for loop
                if ((i) % 10 == 0) { //Every 10 numbers we restart the StringBuilder
                    pane.add(new JLabel(sb.toString())); //We add a new JLabel to the JPanel with the contents of the StringBuilder
                    sb.delete(0, sb.length()); //We restart the StringBuilder
                } else {
                    sb.append(i); //We append the current number to the StringBuilder
                    sb.append(" "); //We append a space after the number
                }
            }
            pane.add(new JLabel(sb.toString())); //We add the last line of numbers in the StringBuilder to the pane
    
            JOptionPane.showMessageDialog(new JFrame(), pane, "Numbers", JOptionPane.PLAIN_MESSAGE); //We display the message
        }
    }
    

    上述程序的输出看起来像(被裁剪或太高):

    enter image description here

  2. # 2 楼答案

    请参阅下面的方法,对代码稍加修改,即可获得所需的输出

    public class FindFactors {
    public static void main(String[] args) {
    final int NumbersPerLine = 10;    // Display 10 numbers per line
    int count = 0; // Count the number of numbers divisible by 5 and 6
    // Test all numbers from 100 to 1,000
    String numbersPerLine = "";
    for (int i = 100; i <= 1000; i++) {
        // Test if number is divisible by 5 and 6
        if (count == 10) {           
            count = 0;
        }
        if (i % 5 == 0 && i % 6 == 0) {
            numbersPerLine =numbersPerLine+" "+i;
            count++;    // increment count
            // Test if numbers per line is 10
    
            if (count % NumbersPerLine == 0) 
                numbersPerLine =numbersPerLine+"\n";
        }
    }
    JOptionPane.showMessageDialog(null, numbersPerLine);
    }
    }