- ベストアンサー
引数としてnew Objectを渡したとき、後でObjectをどうやって参照する?
はじめまして。 以下のようなコードを書いているのですが: class sample extends JScrollPane(){ //コンストラクタ public sample(){ super(new JTextArea); } ここでsuper(new JTextArea);としたこのJTextAreaにアクセス したいと考えています。 友達はgetComponentメソッドを使う方法と、「他でnewする」方法が あると言うのですが、この「他でnewする」というのがどういうこと なのかよく分かりません。 そもそも、JTextAreaはsuper(new JTextArea);したとき、どこへ行って しまうのでしょうか?誰にも参照されていないのでしょうか?? 初心者でしてわかりにくい質問ですみません。 何卒よろしくお願いします。
- foxa-gogo
- お礼率70% (14/20)
- Java
- 回答数2
- ありがとう数2
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
> ここで どこで? 通常なら、 JTextArea jta = new JTextArea(); someMethod(jta); としておき、「ここで」jtaにふつうにアクセスできます。 あなたの例では参照がまったくないので、アクセスのしようがありません。 なお、ついでですが、ふつうは、JScrollPaneのサブクラスを作る必要はありません。
その他の回答 (1)
- koko_u_
- ベストアンサー率18% (459/2509)
>ここでsuper(new JTextArea);としたこのJTextAreaにアクセス >したいと考えています。 どこでアクセスしたいのでしょうか? >そもそも、JTextAreaはsuper(new JTextArea);したとき、どこへ行って >しまうのでしょうか?誰にも参照されていないのでしょうか?? 基底クラス JScrollPane のコンストラクタが受け取って、その中で参照しているはずです。
![foxa-gogo](https://gazo.okwave.jp/okwave/images/contents/av_nophoto_60_3.gif)
お礼
ご回答ありがとうございます。 sampleクラス内で使いたかったのですが、とりあえず#2のお答えどおりにしたらできました。 >基底クラス JScrollPane のコンストラクタが受け取って、その中で参照しているはずです。 なんだか難しいですね。。。
関連するQ&A
- オーバーライドの必要性
まだまだJavaを勉強している途中なのですが、下記のサンプルコードでオーバーライド(メソッドをオーバーロードすることをオーバーライドというのでしょうか…!?)のの必要性がよく分からなくなってしまったので質問させて頂きました。 /* sample.java */ abstract class super_class{ void write(){} } class CLASS1 extends super_class{ void write(){ System.out.println("CLASS1"); } } class CLASS2 extends super_class{ void write(){ System.out.println("CLASS2"); } } class sample{ public static void main(String args[]){ super_class obj = new CLASS2(); obj.write(); obj = new CLASS1(); obj.write(); } } 以上のコードを実行した場合 CLASS2 CLASS1 と表示されるのは多少なりとも勉強して分かったつもりでした…。 しかし、あくまでサンプルであるために特に意味がないことでもオーバーライドの説明をしているのだろうという風に考えてしまったのですが、 結局は、 スーパークラスとサブクラスに同じシグネチャのメソッドがあった場合、各サブクラスのメソッドが実行される と言うことは、スーパークラスのwrite()メソッドは何をしているのでしょうか? 多様性はJavaでも大切なものであるとのことなので質問させて頂きました。 なるべくわかりやすく説明して頂きたいと思います。 どうかお答えをお願いします。
- ベストアンサー
- Java
- 参照されない
クラスSentenceActionperformedのtext1,textの部分がエラーとなります。クラスは呼ばれています。二つとも参照?されていないのです。 参考になるページをみると同じような書き方しているのに問題ないのでどこが違うのかわかりません。この書き方では参照でなきないのだと思いますが正しい書き方がわかりません。別のクラスにしていく方法でいきたいです。 うまく行けばtextの文字がtext1に表示されます。 よろしくお願いします。 import java.awt.Container; import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JTextArea; import javax.swing.JTextField; public class sample extends javax.swing.JFrame{ public sample() { init(); } private void init() { JTextField text = new JTextField(25); JTextArea text1 = new JTextArea(10,25); Container mainFrame = getContentPane(); mainFrame.setLayout(new FlowLayout()); mainFrame.add(text); mainFrame.add(text1); mainFrame.setBounds(0, 0, 500, 500); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); SentenceActionPerformed aa = new SentenceActionPerformed(); text.addActionListener(aa); } class SentenceActionPerformed implements ActionListener{ public void actionPerformed(ActionEvent evt) { text1.setText(text.getText()); } } public static void main(String args[]) { new sample().setVisible(true); } }
- ベストアンサー
- Java
- new演算子が、インスタンスの参照を返さない!?
どうもこんにちは。 現在、iアプリ向けプログラムを作成しています。 しかし、あるクラスだけが、インスタンスを作成できない(?) ようです。 他のクラスの記述と、見比べても差がほぼありません。 コンストラクタの中に、何も書かないようにしたりしてもダメでした。 サンプルコードは、これです。 // ---------------------------------------------------------- // Window window = new Window( 10, 15+(15*6), D.WIN_FLAG_NOCONTROL, 8, 8, 8 ); System.out.println( "エフェクト"+ new Effect() ); //つまり、コンストラクタから参照が得られないのが、問題 Effect effect = new Effect(); System.out.println("effect:"+effect); // ---------------------------------------------------------- // まとめると、Windowクラスのインスタンスは、作れるのに、 Effectクラスは、作れないという事です。 new Effect()のところで、NullPointerException例外が、発生してしまいます。 下記は、Effectクラスのコンストラクタです。 //コンストラクタ Effect() { g = MainCanvas.g; nKey = MainCanvas.nKey; } 特に変わったところは、ありません。 コンストラクタ内の二行を消しても、同じ結果でした。 もしかして、KVMが、壊れたとかでしょうか? ヒープの容量も十分にあったので、それが問題では無いと思いますが、 どうでしょうか? 見直すポイントがあれば、教えて下さい。 お願いします。
- ベストアンサー
- Java
- JTextAreaを持ったJInternalFrameを作りたい
swingでメモ帳を作っているのですが、 新規作成が押されるごとに新しい JTextAreaを持ったJInternalFrameを作りたいのです。 他にもコピーやJpopupメニューなども機能として 追加しているのですがそれらの機能も新しく作った JInternalFrameで機能するようにしたいんです。 参考になるサイトなど見たりしたんですが 自力では無理でした。。どなたかお願いします☆ public class NotePad extends JFrame{ JDesktopPane desktop = new JDesktopPane(); static JTextArea editArea = new JTextArea(); static NotePad frame = new NotePad(); public static void main(String[] args){ frame.setTitle("メモ帳"); frame.setSize(500,400); frame.setVisible(true); frame.setDefaultCloseOperation(EXIT_ON_CLOSE); } public NotePad(){ JScrollPane sp = new JScrollPane(editArea, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); NewAction newAction = new NewAction(); JMenuBar mb = new JMenuBar(); JMenu mn1 = new JMenu("ファイル"); mn1.add(newAction); mb.add(mn1); setJMenuBar(mb); getContentPane().add(sp, BorderLayout.CENTER); } class NewAction extends AbstractAction{ NewAction(){ putValue(NAME, "新規ファイル作成"); public void actionPerformed(ActionEvent e){ JInternalFrame inframe = new JInternalFrame( true, true, true, true); JTextArea ta = new JTextArea(""); JScrollPane sp2 = new JScrollPane(ta, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); inframe.getContentPane().add(spane) desktop.add(inframe); inframe.setVisible(true); }
- ベストアンサー
- Java
- JScrollPaneのオブジェクトは位置位置
JScrollPaneについて、質問させて頂きます。 JScrollPaneに、JTextAreaを縦一列に配置したJPanelを追加しようとしたのですが、何故かJScrollPaneに配置すると、JPanel内のJTextAreaの配置が横一列になってしまいます。 つまり、現在は TEST1 TEST2 TEST3 TEST4....(JTextAreaを並べたJPanelです) となっているJScrollPaneを Test1 Test2 Test3 Test4 のように表示したいのです。 大学の授業に絡むコードですので全てを貼付けるとネットから拾ってきたのではと思われてしまうため、全ては貼付けられませんがコードの一部を張りつけさせて頂きます。 まずはJScrollPaneの設定ですが private JScrollPane getScroll() { if (scroll == null) { scroll = new JScrollPane(innerHomeTimeLine); scroll.setPreferredSize(new Dimension(width, height)); scroll.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); scroll.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED); scroll.setWheelScrollingEnabled(true); } return scroll; } としてJScrollPaneを作成しています、innerHomeTimeLineはJTextAreaを縦一列に並べたJPanelです。 このJScrollPaneを this.add(getScroll(),BorderLayout.NORTH); でJPanelに追加し、そのJPanel(homeTimeLine)をthis.add(homeTimeLine,BorderLayout.CENTER); でJAppletに追加し、表示しています。 JPanel(innerHomeTimeLine)そのものをJAppletに追加すると縦一列に並んだまま表示出来るのは確認しているので、JScrollPaneの設定の問題だと思うのですが、どうすれば良いのでしょうか.... やり方をご存知の方がいましたら、解答して頂けると助かります、宜しくお願いします。 さすがにこのコードだけでは解答は無理、といったことでしたら、必要な部分を教えて頂ければ、抜き出して追記させて頂きます。
- ベストアンサー
- Java
- オブジェクト・・・参照代入・・・???
問題(1) class ApBase extends Object implements Runnable (省略) ApBase aBase = new ApBase(); Runnable aR = aBase; ○ オブジェクトにインターフェースが実装されていることがわかる限りオブジェクト参照をインターフェイス参照に 代入することは可能です。 問題2 class ApBase extends Object implements Runnable (省略) Object obj = aBase; Runnable rn = obj; × コンパイラにとってobjはObjectなのでRunnnableインターフェイス参照への代入は認められません。 同じほんの問題です。 矛盾していませんか??? ・・・・多分僕の理解が足りないだけです(^_^;) もう少しわかりやすく教えてください・・・ お願いいたします
- ベストアンサー
- Java
- protectedメソッドが使用できる範囲
protectedメソッド(もしくはコンストラクタ)はサブクラスからであればアクセスできると覚えていたのですが、以下のような使い方だとサブクラスから見えなくなるようです。 サブクラスでも別パッケージからは参照できないのでしょうか。 ------------------------- package sample.a; import sample.b.*; public class Main2 { public Main2() { } protected Main2(int a){ } protected void hoge(){ } } -------------------------- package sample.b; public class Main extends Main2{ public void hoge(){ Main2 m2 = new Main2(1);//ここでエラー m2.hoge(); //この使い方もエラー } } -------------------------------
- ベストアンサー
- Java
- setLineWrapの使い方
初めまして、皆さん。馬鹿な初心者の悩みを聞いてください。 卒論に向けて、現在、JAVAでアプレットプログラムを書いているのですが、 TextAreaを自動改行させようとコンパイルをかけると、 以下のようなエラーがでてしまうのです。 Java初心者なので、非常に困っています。 どうか教えてくださいよろしくお願いいたします。 なお、実行環境は WindowsXP Home Edition JDK1.3.1_010 です。 --------------------ソース-------------------- /* TextArea改行用テスト */ import java.awt.*; import java.awt.event.*; import java.applet.*; import javax.swing.*; public class JTextArea extends JApplet{ public void init() { JTextArea text = new JTextArea(); text.setLineWrap(true); getContentPane().add(new JScrollPane(text)); } } --------------------エラー-------------------- JTextArea.java:12: シンボルを解決できません。 シンボル: メソッド setLineWrap (boolean) 場所 : JTextArea の クラス text.setLineWrap(true); ^ エラー 1 個
- ベストアンサー
- Java
- static 参照するには??
static 参照するには?? Java初心者です、宜しくお願いします。 下のようなプログラムを書きましたが、「Container gc = getContentPane();」 の箇所で、「型 JFrame の非 static メソッド getContentPane() を static 参照することはできません」とエラーが出ます。 意味がわかりません、またどのように変更してやればよいのでしょうか。 宜しくお願いします。 ======================================================================= class Canvas1 extends JFrame { public void paint(Graphics g) { g.drawRect(150, 150, 50, 50); } } public class SimpleDraw extends JFrame { public static void main(String[] args) { JFrame jf = new JFrame(); JPanel jp = new JPanel(); Container gc = getContentPane(); gc.add(jp); Canvas1 c = new Canvas1; jp.add(c); jf.add(jp); jf.setVisible(true); } }
- ベストアンサー
- Java
- SwingでgetContentPaneのエラーです、お願いします
今晩は、java勉強中のものです、宜しくお願いします。 下のようなプログラムを組んでみましたが、「型JFrameから非staticメソッドgetContentPane()にstatic参照 することは出来ません」というエラーコードです。 原因が良く分かりません、どなたか教えて下さい。 いくら考えても原因がよく分かりません、宜しくお願いします。 ================================================================ public class Panel_train extends JFrame{ public static void main(String[] args) { Container cnt = getContentPane(); JPanel jpanel = new JPanel(); JTextArea jtext = new JTextArea("Hello World", 100, 50); jpanel.add(jtext); cnt.add(jpanel, BorderLayout.CENTER); JFrame frame = new JFrame("テスト"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(200, 100); frame.setVisible(true); } }
- ベストアンサー
- Java
お礼
ありがとうございます! とりあえず教えていただいた方法で解決いたしました。 >なお、ついでですが、ふつうは、JScrollPaneのサブクラスを作る必要はありません。 そうなんですか。。う~ん、もっと勉強します(^^;)