2014-10-11 3 views
0

Я новичок в языке программирования Java, и я пытаюсь написать простой коддействий слушатель будет стрелять

public class TextPanel extends JPanel { 

    private JTextArea textArea; 

    public TextPanel() { 
     textArea = new JTextArea(); 

     setLayout(new BorderLayout()); 
     setVisible(true); 

     add(new JScrollPane(textArea), BorderLayout.CENTER); 
    } 

    public String getTextAreaText() { 
     String text = textArea.getText(); 

     return text; 
    } 
} 

И я добавил слушатель действия кнопки (startBtn) к звезде, но когда я бегу программа ничего не отображается на консоли, даже если я положил System.out.println(textPanel.getTextAreaText()) в метод actionPerformed() (код ниже).

public class Toolbar extends JPanel { 

    private JButton startBtn; 
    private JButton stopBtn; 
    private TextPanel textPanel; 

    public Toolbar() { 
     startBtn = new JButton("Start"); 
     stopBtn = new JButton("Stop"); 
     textPanel = new TextPanel(); 

     setLayout(new FlowLayout(FlowLayout.LEFT)); 
     add(startBtn); 
     add(stopBtn); 

     startBtn.addActionListener(new ActionListener() { 

      @Override 
      public void actionPerformed(ActionEvent arg0) { 
       System.out.println(textPanel.getTextAreaText()); 
      } 
     }); 
    } 
} 

Мне нужна помощь, чтобы исправить это.

+2

Не хорошее название – keyser

+0

Принимаю как ваше название ничего не говорит нам использования. Мы знаем, что вам нужна помощь, иначе вас здесь не будет. Вместо этого, пожалуйста, запишите свой заголовок своей проблемой, точно так же, как заголовок газеты подводит итог статье ниже. Прочтите раздел [tour] и [help], чтобы узнать, как работает этот сайт. –

+0

См. Править для ответа. –

ответ

2
  1. Java-программам требуется публичный статический основной метод для запуска. У вашего кода нет этого, и поэтому нет start точка для вашей программы.
  2. Swing GUI требует, чтобы компоненты были размещены в окне верхнего уровня, таком как JFrame, и чтобы это окно отображалось для компонентов, которые должны быть видны. У вашего кода этого нет.
  3. Вы захотите прочитать руководства по Java и Swing, так как все это очень хорошо объяснено там, в комплекте с образцом кода.

Для приличных ресурсов, пожалуйста, проверьте раздел информация ваших Java и Swing-теги:

Так считают добавление основной метод, который создает ваш JFrame и добавляет компоненты в JFr AME, что-то вроде:

private static void createAndShowGui() { 
    JFrame frame = new JFrame("My JFrame"); 
    frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 

    // add your components to your JFrame here 

    frame.pack(); 
    frame.setLocationByPlatform(true); 
    frame.setVisible(true); 
} 

// the main method which Java uses as the starting point for your program 
public static void main(String[] args) { 

    // let's call our Swing GUI in a thread-safe manner 
    SwingUtilities.invokeLater(new Runnable() { 
    public void run() { 
     createAndShowGui(); 
    } 
    }); 
} 

Редактировать
Вашего код также показывает возможное переменное затенение. Вы создаете объект TextPanel внутри вашего класса панели инструментов, но вы не добавляете эту TextPanel в ничто. Это говорит о том, что у вас может есть объект TextPanel в другом месте, которое отображается (и мы можем только гадать, потому что кажется, что вы не показываете достаточно кода, чтобы мы знали наверняка). Если это так, то нажатие кнопки «Пуск» получит текст с не отображаемый Панель инструментов JTextArea. Вместо того, чтобы рассмотреть вопрос передачи ссылки TextPanel на панели инструментов, что-то вроде этого:

class Toolbar extends JPanel { 

    private JButton startBtn; 
    private JButton stopBtn; 
    private TextPanel textPanel; 

    public Toolbar() { 
     startBtn = new JButton("Start"); 
     stopBtn = new JButton("Stop"); 
     // textPanel = new TextPanel(); // *** note change 

     setLayout(new FlowLayout(FlowLayout.LEFT)); 
     add(startBtn); 
     add(stopBtn); 

     startBtn.addActionListener(new ActionListener() { 

     @Override 
     public void actionPerformed(ActionEvent evt) { 
      if (textPanel != null) { 
       System.out.println(textPanel.getTextAreaText()); 
      } 
     } 
     }); 
    } 

    // **** note this method **** 
    public void setTextPanel(TextPanel textPanel) { 
     this.textPanel = textPanel; 
    } 
} 

И затем при создании объектов, передать в вашей ссылке:

private static void createAndShowGui() { 

    Toolbar toolBar = new Toolbar(); 
    TextPanel textPanel = new TextPanel(); 

    toolBar.setTextPanel(textPanel); // ****** passing in my reference ******* 

    JFrame frame = new JFrame("Add New Lines"); 
    frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
    frame.getContentPane().add(textPanel); 
    frame.getContentPane().add(toolBar, BorderLayout.PAGE_START); 
    frame.pack(); 
    frame.setLocationByPlatform(true); 
    frame.setVisible(true); 
} 
+0

Спасибо, очень это было очень полезно – Boylamn

+0

Есть способ показать свою признательность. Если это поможет вам решить вашу проблему, тогда отметьте ее как ответ :). – MarGar

+0

Ok thx это сделано :) – Boylamn

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