2014-09-13 2 views
1

Я хотел бы начать с того, что вы поблагодарите сообщество stackoverflow и всех великих людей, которые отвечают на эти вопросы. Гораздо чаще, чем нет, я нахожу свой ответ, читая и не набираю текст, но нажимаю на время, поскольку это домашнее задание, которое должно быть завершено в ближайшие пару дней. Итак, вот моя проблема.Печать StringBuffer JOptionPane

Введение в программирование> ASCII Art Project> Я хочу напечатать это окно, а не только скучную консоль.

Это то, что я придумал до сих пор, но изображение не выглядит правильным в JOptionPane.showMessageDialog (Это выглядит как задумано, когда тот же StringBuilder выводится на консоль):

import javax.swing.*; 

public class R2D2 
{ 
    public static void main(String[] args) 
    {  
    boolean test = false;//Create and initialize boolean variable; later used to break out of the Do While loop. 

    do 
    { 
    String name = JOptionPane.showInputDialog("Who is everyone's favorite Droid?");//GUI asking for 'favorite droid' input. 

    if (name.equalsIgnoreCase("R2D2") || name.equalsIgnoreCase("R2"))//Sets boolean test to true if the user inputs the correct answer ie 'R2D2' or 'R2', not case sensitive. 
    { 
     test = true; 
    } 

    else 
    { 
     JOptionPane.showMessageDialog(null, "Nope! Try Again...Dummy.");//Chides the user. 
    } 
    } 
    while (test == false);//Continues back to the top if the user doesn't answer correctly. 


    String l0 = new String("    _____________     ");//In lines 14,15,16 the escape used to place the backslash has no real 
    String l1 = new String("    /_/_/_/_/_/_/_\\    ");//effect because there isn't any ASCII art to the right of the escape (oh no, I just 
    String l2 = new String("    /_/_/_/_/_/_/_/_\\    ");//realized you probably won't like how I am spanning lines with the single line commentor). 
    String l3 = new String("   / _______ \\    "); 
    String l4 = new String("   / /(\"\") \\ \\   ");//The first double quote is shifted one character to the right, the second double quote is shifted two characters to the right, the second backslash (of the first backslash grouping) is shifted three characters to the right, and the second backslash (of the second backslash grouping) is shifted four characters to the right. It's kinda lonely out here. 
    String l5 = new String("   / /_________\\ \\   ");//1 escape in R2's body results in his right edge being shifted to the right one character. 
    String l6 = new String("  /      \\   "); 
    String l7 = new String("  /   0 (O) \\   ");//Again no real effect seen from the escapes on lines 19, 20, 21. 
    String l8 = new String("  /       \\   "); 
    String l9 = new String(" ____(  ---------------  )____  "); 
    String l10 = new String(" | |  ---------------  | | "); 
    String l11 = new String(" | |        | | "); 
    String l12 = new String(" | |        | | "); 
    String l13 = new String(" | |  ---------------  | | "); 
    String l14 = new String(" | |  ===============  | | "); 
    String l15 = new String(" | |        | | "); 
    String l16 = new String(" | |        | | "); 
    String l17 = new String(" | |  ---------------  | | "); 
    String l18 = new String(" | |  ===============  | | "); 
    String l19 = new String(" | |        | | "); 
    String l20 = new String(" | |        | | "); 
    String l21 = new String(" | |        | | "); 
    String l22 = new String(" | |        | | "); 
    String l23 = new String(" ) |_____________________________| ( "); 
    String l24 = new String("/ \\       / \\ "); 
    String l25 = new String("(_______)       (_______) "); 


    String[] lineholder = {l0,l1,l2,l3,l4,l5,l6,l7,l8,l9,l10,l11,l12,l13,l14,l15,l16,l17,l18,l19,l20,l21,l22,l23,l24,l25}; 


    StringBuilder sb = new StringBuilder(); 

    for(int i=0 ; i < lineholder.length; i++) 
    { 
    sb.append(lineholder[i] + "\n"); 
    } 

    JOptionPane.showMessageDialog(null, sb.toString()); 

    System.out.println(sb.toString()); 


    System.out.println("\n\n\n//In Your Best Robot Voice");//Intentionally left comment break visible for effect 
    System.out.println("End Of Program"); 


    } 
} 

Любые предложения? Еще раз спасибо.

+0

Вы можете поделиться снимком экрана с искаженным выходом? – Mureinik

ответ

0

Ваша проблема может быть одной из шрифтов, поскольку JOptionPane не будет отображать данные в виде моноширинного шрифта, который потребуется.

Одним из вариантов является использование JTextArea, где вы установите шрифт моноширинный:

JTextArea tArea = new JTextArea(lineholder.length, 50); 
    tArea.setFont(new Font(Font.MONOSPACED, Font.PLAIN, 10)); 
    tArea.setText(sb.toString()); 
    JScrollPane scrollPane = new JScrollPane(tArea); 
    //!! JOptionPane.showMessageDialog(null, sb.toString()); 
    JOptionPane.showMessageDialog(null, scrollPane); 

Теоретически вы можете установить шрифт в JOptoinPane с помощью

UIManager.put("OptionPane.font", new Font(Font.MONOSPACED, Font.PLAIN, 10)); 

Но я не мог получить это работать.


Edit, или если вы хотите, чтобы избавиться от JScrollPane (привычка для меня, чтобы использовать его) и белый фон:

JTextArea tArea = new JTextArea(lineholder.length, 50); 
    tArea.setFont(new Font(Font.MONOSPACED, Font.PLAIN, 10)); 
    tArea.setText(sb.toString()); 
    tArea.setOpaque(false); 
    JOptionPane.showMessageDialog(null, tArea); 

Как всегда, если что-нибудь в этом ответе смущает вас, или если он не полностью отвечает на ваш вопрос, пожалуйста, напишите комментарий на этот вопрос, попросив уточнить.

+0

Это было на воздушной подушке, спасибо! Если бы я мог просто рассмотреть, чтобы еще больше понять, что было сделано здесь: –

+0

Консоль печатает с моноширинным шрифтом, JOptionPane по умолчанию имеет немоноширинный шрифт, который вызвал изменение моего искусства ASCII. Теоретически мы могли бы изменить шрифт JOptionPane на моноширину, но по какой-то причине это не сработает для вас. Вместо этого мы создали JTextArea с конструктором (строки, столбцы). Затем мы устанавливаем шрифт JTextArea, передавая новый объект шрифта, построенный (font facename MONOSPACE, стиль PLAIN, размер 10). Затем мы перешли в заполненный, моноширинный, непрозрачный JTextArea в showMessageDialog JOptionPane. Это верно? –

Смежные вопросы