- PR -

タブの切り替えについて

1
投稿者投稿内容
未記入
常連さん
会議室デビュー日: 2005/06/03
投稿数: 22
投稿日時: 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());
}
}
}
YOU@IT
ぬし
会議室デビュー日: 2002/03/29
投稿数: 284
お住まい・勤務地: 大阪
投稿日時: 2005-07-13 10:49
長いソースを貼り付けるときは、[ code]〜[ /code]で囲ってくださいね。
インデントがないので読みづらいことこの上ありません。

で、パッと見た感じなのですが、html:JEditorPane がインスタンスフィールドになっているのがポイントにならないでしょうか?
未記入
常連さん
会議室デビュー日: 2005/06/03
投稿数: 22
投稿日時: 2005-07-13 13:40
YOU@ITさんありがとうございます!!
やっと解決できました☆
1

スキルアップ/キャリアアップ(JOB@IT)