2012-04-08 66 views
3

我有一個Java程序,直到現在用於從命令行獲得輸入,然後相應地進行。我們可以使用html和javascript爲獨立應用程序創建GUI嗎?

現在,我想爲此擁有一個基本的GUI。它將需要一些觸發事件的按鈕。我在HTML和JavaScript方面經驗豐富。是否可以用HTML(或類似的語法)編寫來生成GUI?

我不想進入Swing和awt解決方案,因爲我寧願將注意力集中在主程序而不是GUI上。

+1

非常感謝您@geochet :) – 2012-04-08 17:13:59

+0

你肯定goung到一些工具,給出的HTML輸入比進入搖擺的細節將會更容易產生GUI的細節? :)即使這個工具存在,也不會是微不足道的。我建議你的谷歌Swing hello世界,這是很簡單的時候,像幾個按鈕做簡單的事情。最有可能的是,你準備在玩Swing一兩個小時後編寫簡單的GUI。 – 2012-04-08 16:47:35

+1

如果你已經閱讀我的答案,你會發現它是微不足道的,並通過oracle的支持。我還注意到,即使對於大多數java/.NET開發人員(或曾經嘗試過WIN32API的任何人)來說,swing看起來很容易。但對於該地區的新人來說,揮杆可能是一項艱鉅的經歷。 – 2012-04-08 16:48:52

回答

2

您可以考慮Google Web ToolkitWindow Builder,它們允許您使用Java構建富Internet接口並與現有邏輯進行交互。

如果你想要的東西快,你可以建立使用Window Builder

+0

這是件好事。 :) – 2012-04-08 17:09:49

+0

太好了,我想這就是我期待的。你能告訴我如果我使用GWT + Window Builder創建GUI,那麼我的代碼在用戶系統上運行的前提條件是什麼。 – 2012-04-08 17:12:13

+0

就像任何Java Web應用程序一樣,您需要將應用程序託管在Servlet容器(如Tomcat)的Web服務器上,並且應用程序應在任何瀏覽器上運行。 – outellou 2012-04-08 17:23:01

4

我要對此有一個基本的GUI一個Swing GUI。它將需要一些觸發事件的按鈕。

這個'基本的GUI'稍微超出了規範。添加一個輸出區域。

Simple Event GUI

enter image description here

import java.awt.*; 
import javax.swing.*; 

class SimpleEventGUI { 

    SimpleEventGUI() { 
     JPanel gui = new JPanel(new BorderLayout()); 
     JToolBar toolBar = new JToolBar(); 
     for (int ii=1; ii<6; ii++) { 
      toolBar.add(new JButton("Event " + ii)); 
      if (ii%2==0) { 
       toolBar.addSeparator(); 
      } 
     } 
     gui.add(toolBar, BorderLayout.NORTH); 
     gui.add(new JScrollPane(new JTextArea(5,30)), BorderLayout.CENTER); 

     JOptionPane.showMessageDialog(null, gui); 
    } 

    public static void main(String[] args) { 

     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       new SimpleEventGUI(); 
      } 
     }); 
    } 
} 
+2

用於'addSeparator()'的+1。 – trashgod 2012-04-08 22:51:38

+0

@trashgod +1的截圖。謝謝。 :) – 2012-04-08 22:53:09

+1

那就是,我必須說,死簡單。 :) +1 – 2012-04-09 05:05:39

5

這裏的另一種選擇。另請參閱How to Use HTML in Swing Components

enter image description here

import java.awt.EventQueue; 
import java.awt.FlowLayout; 
import java.awt.GridLayout; 
import java.awt.event.ActionEvent; 
import java.io.File; 
import javax.swing.AbstractAction; 
import javax.swing.JButton; 
import javax.swing.JFileChooser; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.JTextField; 

/** 
* @see http://stackoverflow.com/a/10067256/230513 
* @see http://stackoverflow.com/a/7454691/230513 
*/ 
public class Pathfinder extends JPanel { 

    private static final int TEXT_SIZE = 32; 
    private JTextField srcField = new JTextField(TEXT_SIZE); 
    private JTextField dstField = new JTextField(TEXT_SIZE); 
    private JTextField valueField1 = new JTextField(TEXT_SIZE); 
    private JTextField valueField2 = new JTextField(TEXT_SIZE); 
    private String srcPath, dstPath, value1, value2; 

    public Pathfinder() { 
     super(new GridLayout(0, 1)); 
     this.add(createPathPanel("Source Directory", srcField)); 
     this.add(createPathPanel("Target Directory", dstField)); 
     this.add(createFieldPanel("Some Value:", valueField1)); 
     this.add(createFieldPanel("Another Value:", valueField2)); 
     JPanel submitPanel = new JPanel(); 
     submitPanel.add(new JButton(new AbstractAction("Submit") { 

      @Override 
      public void actionPerformed(ActionEvent e) { 
       srcPath = srcField.getText(); 
       dstPath = dstField.getText(); 
       value1 = valueField1.getText(); 
       value2 = valueField2.getText(); 
       process(); 
      } 
     })); 
     this.add(submitPanel); 
    } 

    private void process() { 
     // see ProcessBuilder http://stackoverflow.com/questions/5740390 
     System.out.println(srcPath); 
     System.out.println(dstPath); 
     System.out.println(value1); 
     System.out.println(value2); 
    } 

    private JPanel createPathPanel(String name, final JTextField jtf) { 
     JPanel panel = new JPanel(new FlowLayout(FlowLayout.TRAILING)); 
     panel.add(new JButton(new AbstractAction(name) { 

      @Override 
      public void actionPerformed(ActionEvent e) { 
       JFileChooser jfc = new JFileChooser(
        new File(System.getProperty("user.dir"))); 
       jfc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); 
       int result = jfc.showOpenDialog(Pathfinder.this); 
       if (result == JFileChooser.APPROVE_OPTION) { 
        jtf.setText(jfc.getSelectedFile().getPath()); 
       } 
      } 
     })); 
     panel.add(jtf); 
     return panel; 
    } 

    private JPanel createFieldPanel(String name, JTextField jtf) { 
     JPanel panel = new JPanel(new FlowLayout(FlowLayout.TRAILING)); 
     panel.add(new JLabel(name)); 
     panel.add(jtf); 
     return panel; 
    } 

    private void display() { 
     JFrame f = new JFrame("Pathfinder"); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     f.add(this); 
     f.pack(); 
     f.setLocationRelativeTo(null); 
     f.setVisible(true); 
    } 

    public static void main(final String[] args) { 

     EventQueue.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       Pathfinder pf = new Pathfinder(); 
       if (args.length > 0) { 
        pf.srcPath = args[0]; 
        pf.dstPath = args[1]; 
        pf.process(); 
       } else { 
        pf.display(); 
       } 
      } 
     }); 
    } 
} 
相關問題