2014-06-23 144 views
3

作爲初學者的Java程序員,我想了解一些幫助以瞭解爲我的控制檯應用程序構建搖擺UI的最佳方式或技巧。將控制檯應用程序轉換爲搖擺應用程序

控制檯應用程序運行良好,現在我想將其轉換爲搖擺應用程序。我想在JScrollPane中有一個JTextArea的swing,用戶可以通過編輯來輸入它們的字符串,然後點擊一個countwords按鈕並獲得一個int輸出。

我的控制檯應用程序的代碼和我對swing應用程序的嘗試也在下面。我花了相當多的時間來研究這個問題,但我似乎無法做到。

我將不勝感激任何幫助和建議......感謝先進!

我的控制檯應用程序:

import java.util.*; 
public class WordCounter{ 

public static void main(String args[]) 
    { 
    // Create Scanner object 
    Scanner s=new Scanner(System.in); 

    // Read a string 
    String st=s.nextLine(); 

    //Split string with space 
    String words[]=st.trim().split(" "); 

    System.out.println("No. of words "+words.length); 
    } 
    } 

我企圖在鞦韆:

import java.io.*; 
import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 
import javax.swing.JTextArea; 

import java.util.*; 

class Countswords extends JPanel { 

    public Countswords() { 
     myTextArea(); 

    } 

    private void myTextArea() { 
     this.setLayout(new BorderLayout()); 
     this.setPreferredSize(new Dimension(400, 200)); 

     JTextArea textArea = new JTextArea(5, 40); 
     JScrollPane scrollPane = new JScrollPane(textArea); 
     // textArea.setEditable(true); 
     JTextArea.setText(userInput); 

    } 

    public static void showFrame() { 
     JPanel panel = new Countswords(); 
     panel.setOpaque(true); 

     JFrame frame = new JFrame("My Text Area"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setContentPane(panel); 
     frame.pack(); 
     frame.setVisible(true); 
    } 

    public static void main(String args[]) { 
     // Create Scanner object 
     // Scanner s=new Scanner(System.in); 

     // Read a string 
     // String st=s.nextLine(); 

     // Split string with space 
     // String words[]=st.trim().split(" "); 

     // System.out.println("No. of words "+words.length); 
     SwingUtilities.invokeLater(new Runnable() { 

      public void run() { 
       Countswords.showFrame(); 
      } 
     }); 
    } 
} 
+3

一般認爲你不能'轉換'一個應用程序。從基於命令行到基於GUI。它需要一個完全不同的方法,只是「太寬泛」,不能在SO答案中解釋。請參閱Java教程的[使用JFC/Swing創建GUI](http://docs.oracle.com/javase/tutorial/uiswing/)瞭解如何創建GUI。 –

+1

*「我在Swing的嘗試」*所以......它有什麼問題?你卡在哪裏? –

+1

'this.setPreferredSize(new Dimension(400,200));'請參閱[我應該避免使用Java Swing中的set(Preferred | Maximum | Minimum)Size方法?](http://stackoverflow.com/q/ 7229226/418556)(是) –

回答

2

你可以利用此代碼爲基於Swing讓您的應用。

import java.io.*; 
import java.awt.*; 
import java.awt.event.*; 

import javax.swing.*; 
import java.util.*; 

public class CountWords extends JFrame { 
JTextArea textArea; 
JScrollPane scrollPane; 
Container container; 

JPanel  panel; 
JLabel  label; 

JButton  button; 

public CountWords() { 
    initialize(); 
    addToPanel(); 
} 

public void initialize() { 
    container = getContentPane(); 
    textArea = new JTextArea(5,20); 
    scrollPane = new JScrollPane(textArea); 

    button = new JButton(" Count Words "); 

    panel = new JPanel(); 
    label = new JLabel(" Total Words : "); 

    label.setBackground(Color.yellow); 
} 

public void addToPanel() { 

    panel.add(button); 

    container.add(scrollPane, BorderLayout.NORTH); 
    container.add(panel, BorderLayout.SOUTH); 
    container.add(label, BorderLayout.CENTER); 

    button.addActionListener(new ActionListener(){ 
     public void actionPerformed(ActionEvent ae) { 
      label.setText("No.of Words : "+ getTotalWords(textArea.getText())); 
     } 
    }); 
} 

public int getTotalWords(String text){ 
    String words[]= text.trim().split(" "); 
    return words.length; 
} 
public static void main(String args[]) { 
    CountWords cw = new CountWords(); 
    cw.setDefaultCloseOperation(3); // JFrame.EXIT_ON_CLOSE => 3 
    cw.pack(); 
    cw.setSize(400,300); 
    cw.setVisible(true); 
} 
} 
+1

1)'cw.setDefaultCloseOperation(3);'不要使用魔術數字,使用定義的常量。 2)GUI應該在EDT上啓動。 3)對於文本字段和文本區域的大小建議(列和行),應該不需要'cw.setSize(400,300);'。 4)除非改變功能,否則不要擴展'JFrame'。喜歡構成繼承。 5)'container.add(scrollPane,BorderLayout.NORTH);'最好使用更多本地化的容器'container.add(scrollPane,BorderLayout.PAGE_START);'.. –

+0

謝謝我發現....字符串[] = text.trim()。split(「\\ w \\ s +」);是一種更好的方式來分隔單詞的空格,因爲它剝離了多個空格,如製表符,並提供更準確的字數!總是更好地去除正則表達式。 – Reign

相關問題