- PR -

swingのElement(Tree)について

1
投稿者投稿内容
ryu
会議室デビュー日: 2004/07/29
投稿数: 4
投稿日時: 2004-07-30 18:02
前に投稿したryuです、連続的ですいません、追記で知りたい事がありましたので
質問させてください。
SwingでHTMLのソースをPanelにaddして、そのElementの奥に再起関数で潜っていったのですが、
途中でgetClass().getName()とtoString()でデータを取っていきました。

出てきたのは
javax.swing.text.HTML&Attribute:type
java.lang.String:submit
とsubmitボタンのデータがでてきました、ここまではOKなんですが
実はセットしたHTMLにはsubmitとresetの二つのボタンが
ありまして、デバッグデータで出てくる順番は
name:input → name:(フィールド名) →form:method=post action=アクション名
type:submit model:javax--- value:値
と本には書いてあるのですがデバッグしたところFormと type:submitの部分が
表示されないのです、 無視される原因はなんなのでしょうか?
何か知っていましたらヒントをお願いします。

uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2004-07-30 18:22
文章だけだとよくわからないので、
・HTMLのソース
・出力部分のJavaソース
・出力結果
を貼り付けてみてください。

これは余談ですが、送信する前にご自分で読み返してみて読み手がわかる文章になっているか
どうかチェックしたほうがいいと思いますよ。
ryu
会議室デビュー日: 2004/07/29
投稿数: 4
投稿日時: 2004-07-30 19:34
すいません、確かにわかりずらい文章です(汗
出力結果はこんな感じです 

//-----------------------------------------------------------------------------
Line-184^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1:1
o = javax.swing.text.StyleConstants: name
v = javax.swing.text.html.HTML$Tag: html
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
jamp
Line-184^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2:2
o = javax.swing.text.StyleConstants: name
v = javax.swing.text.html.HTML$Tag: head
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
jamp
Line-184^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
3:3
o = javax.swing.text.StyleConstants: name
v = javax.swing.text.html.HTML$Tag: p-implied
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
jamp
Line-184^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
4:4
o = javax.swing.text.StyleConstants: name
v = javax.swing.text.html.HTML$Tag: content
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
jamp
Line-184^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
5:5
o = javax.swing.text.StyleConstants: name
v = javax.swing.text.html.HTML$Tag: body
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
jamp
Line-184^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
6:6
o = javax.swing.text.html.HTML$Attribute: action
v = java.lang.String: aaa
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Line-184^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
6:7
o = javax.swing.text.StyleConstants: name
v = javax.swing.text.html.HTML$Tag: form
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Line-184^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
6:8
o = javax.swing.text.html.HTML$Attribute: name
v = java.lang.String: test
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Line-184^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
6:9
o = javax.swing.text.html.HTML$Attribute: method
v = java.lang.String: post
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
jamp
Line-184^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
7:10
o = javax.swing.text.StyleConstants: name
v = javax.swing.text.html.HTML$Tag: p-implied
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
jamp
Line-184^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
8:11
o = javax.swing.text.StyleConstants: model
v = javax.swing.DefaultButtonModel: javax.swing.DefaultBu
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Line-184^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
8:12
o = javax.swing.text.html.HTML$Attribute: type
v = java.lang.String: submit
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Line-184^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
8:13
o = javax.swing.text.StyleConstants: name
v = javax.swing.text.html.HTML$Tag: input
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Line-184^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
8:14
o = javax.swing.text.html.HTML$Attribute: name
v = java.lang.String: $10
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Line-184^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
8:15
o = javax.swing.text.html.HTML$Attribute: value
v = java.lang.String: OK
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
jamp
Line-184^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
9:16
o = javax.swing.text.StyleConstants: model
v = javax.swing.DefaultButtonModel: javax.swing.DefaultBu
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Line-184^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
9:17
o = javax.swing.text.html.HTML$Attribute: type
v = java.lang.String: reset
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Line-184^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
9:18
o = javax.swing.text.StyleConstants: name
v = javax.swing.text.html.HTML$Tag: input
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Line-184^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
9:19
o = javax.swing.text.html.HTML$Attribute: name
v = java.lang.String: $11
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Line-184^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
9:20
o = javax.swing.text.html.HTML$Attribute: value
v = java.lang.String: Cancel
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
jamp
Line-184^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
10:21
o = javax.swing.text.StyleConstants: name
v = javax.swing.text.html.HTML$Tag: content
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^




//----------------------------------------------------------------------------


javaソースはこう書きました

import java.io.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.text.*;
import javax.swing.event.*;
import javax.swing.text.html.*;
import javax.swing.tree.*;
import java.util.*;


public class Main extends BasicWindow4{
JEditorPane html;


String htmlText =
"<html><body><form name=test action=aaa method=post>" +

" <input type=submit name=$10 value=OK> " +
" <input type=reset name=$11 value=Cancel> " +
"</form></body>" ;


String ByourekiSouce=htmlText;
String SousyouSouce=Sousyou.test;
String IsiSouce=Isi.test;


public static void main(String[] args) {
Main frame = new Main( "Main",0 );
frame.setDefaultCloseOperation(3); // EXIT_ON_CLOSE
frame.setSize( 400, 600 );
frame.setVisible( true );
}
Main( String title,int ui ){
super(title,ui);
html = new JEditorPane( "text/html", htmlText );
Container pane = getContentPane();
pane.add( html );
Document doc = html.getDocument();
getAction( doc.getDefaultRootElement() );
}


static boolean submit=false;
static int count=0,loop=0;


void getAction( Element e ){
count++;
AttributeSet aSet = e.getAttributes();
Enumeration enum = aSet.getAttributeNames();

while( enum.hasMoreElements() )
{
loop++;
Object o = enum.nextElement();
Object v = aSet.getAttribute( o );
System.out.println(^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^");
System.out.println(count+":"+loop);
System.out.println("o = " + o.getClass().getName() + ": " + o.toString());
System.out.println("v = " + v.getClass().getName() + ": " + v.toString());
System.out.println("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^");

}

//--------- Elementの階層を下へ再帰的に辿っていく
for( int i = 0 ; i < e.getElementCount() ; i++ ) {
System.out.println("jamp");
getAction( e.getElement(i) );
}
}
class CheckAction implements ActionListener {
public void actionPerformed( ActionEvent e ){
System.out.println( "action from OK" );
}
}


}

いらない所は端折ったので変なところがあると思いますが。

これを実行すると

Object o = enum.nextElement();
Object v = aSet.getAttribute( o );を
System.out.printlnしたものがDOSにでまして

表示結果が
javax.swing.text.HTML&Attribute:type
java.lang.String:submit
とか表示されるのですが、二つ表示されるはずが一つしか出ない
という状況になってます。

本などを見ると表示結果は
javax.swing.text.HTML&Attribute:name
java.lang.String:input

javax.swing.text.HTML&Attribute:name
java.lang.String:submit $11

javax.swing.text.HTML&Attribute:form
java.lang.String:method=post action=aaa

javax.swing.text.HTML&Attribute:type
java.lang.String:submit


javax.swing.text.HTML&Attribute:model
java.lang.String:javax.swing.DefaultButtonModel@4025c50

javax.swing.text.HTML&Attribute:value
java.lang.String:OK

と表示されるらしいのですが
自分が作ったコードだと
javax.swing.text.HTML&Attribute:type
java.lang.String:submit
が表示されず
javax.swing.text.HTML&Attribute:value
java.lang.String:OK
と最後にでて、もう一つのボタンresetは
ちゃんと表示されるという状況です。

自分でもコードを変えて見まして ExtendsしているBasicWindow4というのを
JFrameに変えてみたところ、うまく動作するようになったのですが
納得できてないままなのでBBSに書き込ましてください(汗
BasicWindow4はBasicWindow1,2,3を継承していまして、内容は
ContainerPaneとかをコンストラクタでNewしていたりしてます。

importしているものは
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
1,2,3、4とも同じです


BasicWindowだけ載せておきます、後のはこれを拡張したやつなんですが
長いのでやめときます(汗
public class BasicWindow extends JFrame
{
protected JMenuBar menuBar;
protected Container pane;
protected JToolBar toolBar;
protected JMenu menu=null;

public static void main(String[] args)
{
BasicWindow w=new BasicWindow("Basic Window",0);
w.setSize(500,300);
w.setVisible(true);
}

public BasicWindow(String title,int ui)
{
super(title);
setupUI(ui);

menuBar=new JMenuBar();
setJMenuBar(menuBar);

pane=getContentPane();


toolBar=new JToolBar();
pane.add(toolBar,BorderLayout.NORTH);
}

protected void setupUI(int ui)
{
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){System.exit(0);}
});


try{
UIManager.setLookAndFeel(
"com.sun.java.swing.plaf.metal.metalLookAndFeel");
SwingUtilities.updateComponentTreeUI(this);
}
catch(UnsupportedLookAndFeelException e){
}
catch(ClassNotFoundException e){
}
catch(InstantiationException e){
}
catch(IllegalAccessException e){
}
}


}




長すぎてすいません・・・。
Wata
ぬし
会議室デビュー日: 2003/05/17
投稿数: 279
投稿日時: 2004-07-30 19:45
引用:
ryuさんの書き込み (2004-07-30 19:34) より:
Line-184^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
8:12
o = javax.swing.text.html.HTML$Attribute: type
v = java.lang.String: submit
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

よく見た?
1

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