我有一個Java程序,直到現在用於從命令行獲得輸入,然後相應地進行。我們可以使用html和javascript爲獨立應用程序創建GUI嗎?
現在,我想爲此擁有一個基本的GUI。它將需要一些觸發事件的按鈕。我在HTML和JavaScript方面經驗豐富。是否可以用HTML(或類似的語法)編寫來生成GUI?
我不想進入Swing和awt解決方案,因爲我寧願將注意力集中在主程序而不是GUI上。
我有一個Java程序,直到現在用於從命令行獲得輸入,然後相應地進行。我們可以使用html和javascript爲獨立應用程序創建GUI嗎?
現在,我想爲此擁有一個基本的GUI。它將需要一些觸發事件的按鈕。我在HTML和JavaScript方面經驗豐富。是否可以用HTML(或類似的語法)編寫來生成GUI?
我不想進入Swing和awt解決方案,因爲我寧願將注意力集中在主程序而不是GUI上。
您可以考慮Google Web Toolkit與Window Builder,它們允許您使用Java構建富Internet接口並與現有邏輯進行交互。
如果你想要的東西快,你可以建立使用Window Builder
這是件好事。 :) – 2012-04-08 17:09:49
太好了,我想這就是我期待的。你能告訴我如果我使用GWT + Window Builder創建GUI,那麼我的代碼在用戶系統上運行的前提條件是什麼。 – 2012-04-08 17:12:13
就像任何Java Web應用程序一樣,您需要將應用程序託管在Servlet容器(如Tomcat)的Web服務器上,並且應用程序應在任何瀏覽器上運行。 – outellou 2012-04-08 17:23:01
我要對此有一個基本的GUI一個Swing GUI。它將需要一些觸發事件的按鈕。
這個'基本的GUI'稍微超出了規範。添加一個輸出區域。
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();
}
});
}
}
用於'addSeparator()'的+1。 – trashgod 2012-04-08 22:51:38
@trashgod +1的截圖。謝謝。 :) – 2012-04-08 22:53:09
那就是,我必須說,死簡單。 :) +1 – 2012-04-09 05:05:39
這裏的另一種選擇。另請參閱How to Use HTML in Swing Components。
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();
}
}
});
}
}
非常感謝您@geochet :) – 2012-04-08 17:13:59
你肯定goung到一些工具,給出的HTML輸入比進入搖擺的細節將會更容易產生GUI的細節? :)即使這個工具存在,也不會是微不足道的。我建議你的谷歌Swing hello世界,這是很簡單的時候,像幾個按鈕做簡單的事情。最有可能的是,你準備在玩Swing一兩個小時後編寫簡單的GUI。 – 2012-04-08 16:47:35
如果你已經閱讀我的答案,你會發現它是微不足道的,並通過oracle的支持。我還注意到,即使對於大多數java/.NET開發人員(或曾經嘗試過WIN32API的任何人)來說,swing看起來很容易。但對於該地區的新人來說,揮杆可能是一項艱鉅的經歷。 – 2012-04-08 16:48:52