- - PR -
タブの切り替えについて
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2005-07-13 06:26
swingでタブブラウザーを作っているのですが
データベースのmysqlとswingを使い、データベースに 登録しているデータ(URL)をコンボボックスに表示させて そのURLのページをWEBページとして表示できるようにしているのですが、 表示まではできたのですが、タブの切り替えで問題が起こりました。 コンボボックスに選択したURLがずっと表示されているため、 次々にページを開くと新しいタブのページは表示されるのですが、 古いタブのページが非表示になってしまうのです。 例えば普通のタブブラウザーなら、新しいページをどんどん 開いていくと、タブの数が増えていき新しく 開いたページも前に開いたページも見えるはずですが、 新しく開いたページは表示されているのですが、 前に開いたページが非表示になってしまうのです。 コンボボックスのURLが新しく開いたページのURLに なってしまい、表示されなくなってしまいます。 どうしたらよいか全く解からなくなってしまいました どなたかお願いします!! -------------------------------------------------------------- drop table if exists Browser; create table Browser( id int auto_increment primary key, name varchar(200), address text ); insert into Browser values(null,'google','http://www.google.co.jp/'); insert into Browser values(null,'yahoo','http://www.yahoo.co.jp/'); -------------------------------------------------------------------------- public class Browser extends JFrame implements ActionListener , ItemListener , HyperlinkListener { public static void main(String args[]) { Browser frame = new Browser(); frame.setTitle("ブラウザ"); frame.setVisible(true); } private Connection connect() throws Exception{ Class.forName("com.mysql.jdbc.Driver"); String url = "jdbc:mysql://localhost/〜〜〜〜"; String user = "root"; String pass = "〜〜〜"; Connection con = DriverManager.getConnection(url,user,pass); return con; } JEditorPane html = new JEditorPane(); private JComboBox urlComboBox = new JComboBox(); private JTabbedPane tabPane = new JTabbedPane(JTabbedPane.TOP ,JTabbedPane.SCROLL_TAB_LAYOUT); public Browser(){ urlComboBox.setEditable(true); urlComboBox.addItemListener(this); try{ //DBに接続 Connection con = connect(); //SQL発行先ほど指定したConnection con を利用 Statement stmt = con.createStatement(); String sql ="select address from Browser"; ResultSet rs = stmt.executeQuery(sql); //結果の取得 while(rs.next()){ String address = rs.getString("address"); urlComboBox.addItem(address); } //切断 con.close(); } catch(Exception ex) { System.out.println(ex); } //指定したファイルを読み込み、タブに追加する。 private void openFile(File file) { long length = file.length(); if (length == 0L) return; String text = ""; try { InputStream stream = new FileInputStream(file); BufferedReader reader = new BufferedReader( new InputStreamReader(stream) ); while(true) { String temp = reader.readLine(); if (temp == null) break; else text += temp; } } catch(Exception err) { //IO 例外をここに記述する。 System.out.println(err); } addDocument(text , "text/html" , file.getName()); } public void addDocument(String text, String type, String title) { html.setEditable(false); html.addHyperlinkListener(this); JScrollPane pane = new JScrollPane(html); tabPane.addTab(title, null , pane); } public void addDocument(URL url) { html.setContentType("text/html "); html.setEditable(false); html.addHyperlinkListener(this); try { html.setPage(url); } catch(Exception err) { System.out.println(err); } JScrollPane pane = new JScrollPane(html); tabPane.addTab(url.toString() , null , pane); } public void itemStateChanged(ItemEvent e) { switch (e.getID()) { case ItemEvent.ITEM_STATE_CHANGED: if (e.getStateChange() == ItemEvent.DESELECTED) break; try { String addr = urlComboBox.getSelectedItem().toString(); URL url = new URL(addr); addDocument(url); } catch(Exception err) { System.out.println(err); } } } public void hyperlinkUpdate(HyperlinkEvent e) { HyperlinkEvent.EventType type = e.getEventType(); if (type == HyperlinkEvent.EventType.ACTIVATED) { urlComboBox.setSelectedItem(e.getURL().toString()); } } } |
|
投稿日時: 2005-07-13 10:49
長いソースを貼り付けるときは、[ code]〜[ /code]で囲ってくださいね。
インデントがないので読みづらいことこの上ありません。 で、パッと見た感じなのですが、html:JEditorPane がインスタンスフィールドになっているのがポイントにならないでしょうか? |
|
投稿日時: 2005-07-13 13:40
YOU@ITさんありがとうございます!!
やっと解決できました☆ |
1