2016-10-15 3 views
0

Я пытаюсь создать графический интерфейс для генератора случайных имен, который я создал, в настоящее время я пытаюсь заставить его распечатать имена, когда я нажимаю кнопку.JTextField установлен неверный вывод текста

Однако вместо списка имен все, что я получаю, это «[]». Я мало что знаю о программировании графического интерфейса, поэтому я не уверен, что здесь происходит.

import java.io.IOException; 
import java.nio.file.Files; 
import java.nio.file.Paths; 
import java.util.ArrayList; 
import java.util.List; 
import java.util.Random; 
import java.util.Scanner; 
import java.nio.file.*; 
import java.util.*; 


public class Applet1 extends javax.swing.JApplet { 

public static List<String> list = new ArrayList<String>(); 

public static void init(String args[])throws IOException{ 

     List<String> prefix = Files.readAllLines(Paths.get("prefix.txt")); 
     List<String> suffix = Files.readAllLines(Paths.get("suffix.txt")); 
     Random randomizer = new Random(); 


     String prefix2 = prefix.get(randomizer.nextInt(prefix.size())); 
     String suffix2 = suffix.get(randomizer.nextInt(suffix.size()));       
     Random ran = new Random(); 
     int C = ran.nextInt(5); 

     for(int A=0;A <= 5;A++){ 
      if(C == 0) 
       list.add(prefix2 + " ");     
      else if(C>0 && C<3) 
       list.add(prefix2 + suffix2+ " ");     
      else if(C>2 && C<6) 
       list.add(prefix2 + " " + prefix2 + suffix2+ " ");}} 


public void init() { 
    /* Set the Nimbus look and feel */ 
    //<editor-fold defaultstate="collapsed" desc=" Look and feel setting  code (optional) "> 
    /* If Nimbus (introduced in Java SE 6) is not available, stay with the  default look and feel. 
    * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
    */ 
    try { 
     for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) { 
      if ("Nimbus".equals(info.getName())) { 
       javax.swing.UIManager.setLookAndFeel(info.getClassName()); 
       break; 
      } 
     } 
    } catch (ClassNotFoundException ex) { 
     java.util.logging.Logger.getLogger(Applet1.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
    } catch (InstantiationException ex) { 
     java.util.logging.Logger.getLogger(Applet1.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
    } catch (IllegalAccessException ex) { 
      java.util.logging.Logger.getLogger(Applet1.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
    } catch (javax.swing.UnsupportedLookAndFeelException ex) { 
       java.util.logging.Logger.getLogger(Applet1.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
    } 
    //</editor-fold> 

    /* Create and display the applet */ 
    try { 
     java.awt.EventQueue.invokeAndWait(new Runnable() { 
      public void run() { 
       initComponents(); 
      } 
     }); 
    } catch (Exception ex) { 
     ex.printStackTrace(); 
    } 
} 

/** 
* This method is called from within the init() method to initialize the 
* form. WARNING: Do NOT modify this code. The content of this method is 
* always regenerated by the Form Editor. 
*/ 
@SuppressWarnings("unchecked") 
// <editor-fold defaultstate="collapsed" desc="Generated Code">       
private void initComponents() { 

    jComboBox1 = new javax.swing.JComboBox<>(); 
    jButton1 = new javax.swing.JButton(); 
    jLabel1 = new javax.swing.JLabel(); 
    jTextField1 = new javax.swing.JTextField(); 

    setMinimumSize(new java.awt.Dimension(498, 517)); 

    jComboBox1.setModel(new javax.swing.DefaultComboBoxModel<>(new String[] { "1", "5", "10", "15" })); 

    jButton1.setText("Press"); 
    jButton1.addActionListener(new java.awt.event.ActionListener() { 
     public void actionPerformed(java.awt.event.ActionEvent evt) { 
      jButton1ActionPerformed(evt); 
     } 
    }); 

    jLabel1.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N 
    jLabel1.setText("Select number of names and press button to Generate"); 

    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); 
    getContentPane().setLayout(layout); 
    layout.setHorizontalGroup(
     layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addGroup(layout.createSequentialGroup() 
      .addGap(18, 18, 18) 
      .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
       .addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 345, javax.swing.GroupLayout.PREFERRED_SIZE) 
       .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, 359, javax.swing.GroupLayout.PREFERRED_SIZE) 
       .addGroup(layout.createSequentialGroup() 
        .addComponent(jButton1) 
        .addGap(18, 18, 18) 
        .addComponent(jComboBox1, javax.swing.GroupLayout.PREFERRED_SIZE, 80, javax.swing.GroupLayout.PREFERRED_SIZE))) 
      .addContainerGap(121, Short.MAX_VALUE)) 
    ); 
    layout.setVerticalGroup(
     layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addGroup(layout.createSequentialGroup() 
      .addContainerGap() 
      .addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 32, javax.swing.GroupLayout.PREFERRED_SIZE) 
      .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) 
      .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
       .addComponent(jButton1) 
       .addComponent(jComboBox1,  javax.swing.GroupLayout.PREFERRED_SIZE, 21,  javax.swing.GroupLayout.PREFERRED_SIZE)) 
      .addGap(18, 18, 18) 
      .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, 389, javax.swing.GroupLayout.PREFERRED_SIZE) 
      .addContainerGap(33, Short.MAX_VALUE)) 
    ); 
}// </editor-fold>       

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {           
    jTextField1.setText(list.toString()); 
}           


// Variables declaration - do not modify      
private javax.swing.JButton jButton1; 
private javax.swing.JComboBox<String> jComboBox1; 
private javax.swing.JLabel jLabel1; 
private javax.swing.JTextField jTextField1; 
// End of variables declaration 



} 

Насколько я могу судить, я где-то сломал код, или TextField не может обрабатывать массивы String.

+0

Система вне println этот список.toString()) сначала, посмотрите, что произойдет. Тогда вы можете выяснить, является ли ваш графический интерфейс проблемой или ваша логика где-то еще – Marko

ответ

3

Этот метод никогда не вызывается:

public static void init(String args[])throws IOException{ 

В результате list остается пустым.

Другие советы/замечания/вопросы:

  1. размер апплета установлен в HTML, поэтому установка любого размера (минимальный, размер или максимальный) никогда не должны быть названы в коде.

    setMinimumSize(new java.awt.Dimension(498, 517)); 
    
  2. Зачем нужен апплет? Если это связано с тем, что учитель указал его, обратитесь к Why CS teachers should stop teaching Java applets.

  3. См. Java Plugin support deprecated и Moving to a Plugin-Free Web.
  4. Из внешнего вида графического интерфейса размером текстового поля кажется, что на самом деле это должна быть многострочная текстовая область (JTextArea).
+1

Настолько неправильно с кодом OP, трудно узнать, с чего начать. –

+0

1. Всякий раз, когда я начинаю это через Eclipse, страница апплетов слишком мала, поэтому я стараюсь сделать ее больше. Никогда не работает. – Exostrike

+0

Кроме того, я просто посмотрел, как сделать графический интерфейс Java, и было много страниц, на которых говорилось, что апплеты - это путь. Также, если мне нужно преобразовать его в TextArea, который, вероятно, сломает мой существующий код. Дизайн GUI должен быть таким сложным? – Exostrike

3

Ваша проблема не имеет ничего общего с графическим интерфейсом или кодом Swing, и все это связано с неправильным циклом. Он никогда не зацикливается, так как ваше состояние в обратном направлении:

for(int A=0;A >= 5;A++){ 

Поскольку переменная A начинает быть 0, он никогда не выполняет цикл логических критериев A >= 5, и поэтому цикл никогда не «петли», и список остается пустым - это то, что вы видите.

Одно из решений заключается в изменении этого цикла, так что он работает, и, возможно, вы хотите:

for(int A = 0; A <= 5; A++) { // this loops 6 times (not 5) 

Пожалуйста, проверьте: How to Debug Small Programs

Кроме того, ваш класс является апплет, и все же вы дали его основной метод - метод, который никогда не работает в апплете. Должен ли этот код быть в методе init()?

+0

спасибо, что заметили, что я изменил ее, но она по-прежнему производит только «[]» в любом случае – Exostrike

+0

чувак 'list.toString', обновить его –

+0

@ Exostrike: также ваш класс - это апплет, и все же вы дали ему основной метод - метод, который ** никогда не запускается в апплете. Не должен ли этот код быть в методе 'init()'? –

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