浏览器使用JFrame

时间:2014-11-20 11:06:58

标签: java swing jframe

我尝试使用swing和awt创建一个Web浏览器。我也使用了actionlistener和actionevent。但它没有用。请帮我解决一下这个。 它运行没有任何错误,但没有加载网页。

import java.awt.*;
import java.net.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import javax.swing.*;
import javax.swing.event.HyperlinkEvent;
import javax.swing.event.HyperlinkListener;

    public class img extends JFrame
    {
    private TextField field=new TextField();
    private JButton b=new JButton("go");
    private JEditorPane display=new JEditorPane();
    private JScrollPane panee=new JScrollPane(display);

    public static void main(String args[])
    {
        img file=new img();
        file.frameHandler();
    }

    public void frameHandler() {
        setTitle("Browser");
        setSize(1200,800);
          setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
          setVisible(true);
          setLayout(null);
          setResizable(false);
          setLocationRelativeTo(null);
          addComponentsToFrame(getContentPane());
    }

    public void addComponentsToFrame(Container pane) {
        Insets insets=getInsets();
        pane.add(field);
        pane.add(panee);
        Font font=new Font("STENCIL",Font.ITALIC,10);
        field.setFont(font);
        field.setBounds(8-insets.left, 30-insets.top,1160, 20);
        b.setBounds(1150-insets.left, 30-insets.top,80, 20);
        panee.setBounds(8-insets.left, 52-insets.top, 1200, 830);
        pane.add(b);

    }

    private void actionListenerCalls()
    {
        b.addActionListener(new ActionListener(){

            @Override
            public void actionPerformed(ActionEvent e) {
         loadData("http://"+e.getActionCommand());
     }            
     });

     display.addHyperlinkListener(new HyperlinkListener(){

            @Override
        public void hyperlinkUpdate(HyperlinkEvent e) 
            {
                if(e.getEventType()==HyperlinkEvent.EventType.ACTIVATED){
                    loadData(e.getURL().toString());
                }

            }              
                    });  
      }
      private void loadData(String text)
     {
      try{
        display.setPage(text);
    }
    catch(Exception ee)
    {
        System.out.println("error");
    }     
}

}

1 个答案:

答案 0 :(得分:1)

您尚未调用方法actionListenerCalls来绑定侦听器

可能会把它放在这里:

public void frameHandler() {
    ....
    addComponentsToFrame(getContentPane());
    actionListenerCalls();//<-- invoke here
    setVisible(true);
}

P.S。请避免使用null布局。

修改

来自docs:

  

我们不支持完整的CSS规范。请参阅CSS的javadoc   看看我们支持的属性。两个主要的CSS解析   我们目前不支持的相关概念是伪选择器,   例如A:link {color:red}和重要修饰符。

     

注意:此实施目前尚未完成。它可以被替换   使用完整的替代实现。未来的版本   这个类将提供更好的CSS支持。

您可以尝试load external css:

StyleSheet ss = new StyleSheet();
ss.importStyleSheet(styleSheetURL);
HTMLEditorKit kit = (HTMLEditorKit)jEditorPane.getEditorKit();
kit.setStyleSheet(ss);

打开默认浏览器

您可以尝试使用Desktop browse()

来自docs

  

browse(uri)方法可以抛出各种异常,包括a   NullPointerException如果URI为null,则为   如果不支持BROWSE操作,则为UnsupportedOperationException。   如果是默认浏览器,则此方法可以抛出IOException   应用程序无法找到或启动,如果是一个SecurityException   安全管理员否认调用。

private void onLaunchBrowser(ActionEvent evt) {
    URI uri = null;
    try {
        uri = new URI(txtBrowserURI.getText());
        desktop.browse(uri);
    } catch(IOException ioe) {
        System.out.println("The system cannot find the " + uri + 
             " file specified");
          //ioe.printStackTrace();
    } catch(URISyntaxException use) {
          System.out.println("Illegal character in path");
          //use.printStackTrace();
    }
}