• 締切済み

別クラスからTextFieldなどを加える方法

メインのクラスとは別のクラスでボタンなどを表示させたいのですが、方法がわかりません。 一応 import java.awt.*; import java.awt.event.*; class Test extends Frame{ private Image offImage; //仮想画面 private Graphics gv; // 仮想画面Graphicsオブジェクト private SubClass SC; //サブクラス public Test(){ setTitle("Test"); setSize(400,300); setVisible(true); //仮想画面の生成 offImage = createImage(400,300); gv = offImage.getGraphics(); //閉じる addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e) {System.exit(0);}}); //サブクラス生成 SC = new SubClass(this); myDraw(); } public static void main(String args[]){ Frame f = new Test(); } public void myDraw(){ gv.drawString("仮想画面を使って表示しています。",100,100); } public void paint(Graphics g){ //仮想画面を表示 g.drawImage(offImage,0,0,this); } public void update(Graphics g){} } class SubClass{ Test T; public SubClass(Test t){ T = t; T.add(new TextField(10)); } } こんな感じでやろうとしてみたのですが、できません。 どうすればいいか教えてください!!お願いします。。。

  • siois
  • お礼率60% (53/88)
  • Java
  • 回答数1
  • ありがとう数1

みんなの回答

回答No.1

「メインのクラスとは別のクラスでボタンなどを表示させたい」という要件だけなら、いらないものを省いてこうすればできます。 TextFieldを加えた後でsetSize(400,300);setVisible(true);を行うのがポイントでしょうか。 import java.awt.*; import java.awt.event.*; class Test extends Frame{ private SubClass SC; //サブクラス public Test(){ setTitle("Test"); //閉じる addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e) {System.exit(0);}}); //サブクラス生成 SC = new SubClass(this); setSize(400,300); setVisible(true); } public static void main(String args[]){ Frame f = new Test(); } class SubClass{ Test T; public SubClass(Test t){ T = t; T.add(new TextField("TextField.",10)); } } }

siois
質問者

お礼

ありがとうございました!! 参考にがんばってみます!!

関連するQ&A

  • 別クラスのスレッドによるpaint()が上手くいきません!!

    たびたびすみません、、、今度は別のクラスに記述したpaint()をメインでスレッド起動しても描写されません…オーバーライドか何かしなければいけないらしい情報を探し当てた気がするのですが、いまいちよくわかりません。。どうすればいいのでしょうか? 下に自分で作ってみたソースの抜粋を書きます。 import java.awt.*; import java.awt.event.*; class test extends Frame { subclass sc = new subclass(); Thread th=new Thread(sc); public static void main(String args[]) { test t=new test(); } public test() { setTitle("Test"); setSize(300,200); setVisible(true); th.start(); //閉じる addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); } } class subclass extends Frame implements Runnable { int i; public void run() { for(i=0;i<100;i++) { repaint(); } try { Thread.sleep(1000); } catch(InterruptedException e){} } public void paint(Graphics g) { g.drawOval(i,i,50,50); } } (EOS) どうか教えていただける方、お願いします!!

  • JAVA初心者です。

    javaにおけるprivateメンバの動きについて伺いたいことがございます。 基本的にスーパークラスのprivateなメンバへはメソッド・フィールドともにサブクラスからは アクセスできないとのことですが、 例えば、以下のようなコードがあるとします。 //スーパークラスの定義 class SuperClass{ private String privateString = "スーパークラスのプライベートメンバ"; public void getter(){ System.out.println(this.privateString); } } //サブクラス class SubClass extends SuperClass{ } //実行クラス class RunClass { static public void main (String args []){ SubClass subObj; subObj = new SubClass(); subObj.getter(); } } 上記のようなコードの場合サブクラスのインスタンスであるsubObjが スーパークラスのpublicなメソッドを通じてサブクラスからスーパークラスのprivateメンバへアクセスが できてしまっています。 これは、スーパークラスのprivateが隠蔽されていないのではないでしょうか? 果たして、このときいったサブクラスのインスタンスのsubObjはどういった動きをしているのでしょうか?

    • ベストアンサー
    • Java
  • C++で、クラスの受け渡しを行いたい

    C++を現在勉強中です。 java は少しだけわかるのですが、 以下のjavaのコードをC++で実現する方法が わかりません。 ------------------------------------------- class test2 { private test2() { } public test2(String hoge) { } } class test1 { private void method1(test2 t2) { } public static void main(String[] args) { test1 t1 = new test1(); } } ------------------------------------------- ようは、test2クラスのデフォルトコンストラクタを不可視にしておきながら、呼び出し側でどのように定義すればよいのかがわかりません。 どなたか回答お願いします。

  • Javaを説明するには

    4枚の絵をパラパラアニメにするソースなのですが。これをわけ合って説明しなくてはならなくなってしまいました。 薄らぼんやりとはわかるのですが。どう説明したらいいのかさっぱり分かりません、どう説明すれば、分かりやすく正しく伝えられるでしょうか?>< import java.applet.Applet; import java.awt.Graphics; import java.awt.Image; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class DNA extends Applet implements Runnable, ActionListener { Image image[] = new Image[4]; int[] timing = { 400,350,230,350}; Thread t; int index1 = 0; int no = 0; private static final long serialVersionUID = 1L; public void init(){ for(int i = 0; i<4; i++){ image[i] = getImage(getDocumentBase(),"img"+(i)+".gif"); } } public void paint(Graphics g){ g.drawImage(image[index1],0,0,this); } public void update(Graphics g) { paint(g); if(++no==4)no=0; } public void start(){ t = new Thread(this); t.start(); } public void run() { while(true){ index1++; if(index1 == 4){ index1 = 0; } repaint(); try{ Thread.sleep(timing[no]); }catch(InterruptedException e){} }} public void actionPerformed(ActionEvent arg0) { } }

  • createImage()を使いコンパイル

    このプログラムをcreateImage()を使ってイメージを作りたいのですが自分で変更してもコンパイルできません><;どのように変更したらイメージをつくることができるのでしょうか?回答よろしくおねがいしまあす(^^; import java.awt.Color; import java.awt.Color; import java.awt.Graphics; import java.awt.Image; import java.awt.event.MouseEvent; import java.awt.event.MouseMotionListener; import java.awt.image.BufferedImage; import javax.swing.JComponent; import javax.swing.JFrame; class Test extends JComponent implements MouseMotionListener { public static void main(String[] args) { JFrame frame = new JFrame(); frame.getContentPane().add(new Test()); frame.setBounds(0 , 0 , 400 , 300); frame.setVisible(true); frame.setDefaultCloseOperation(JFrame.EXIT ON CLOSE); } Image image; public Test() { addMouseMotionListener(this); image = new BufferedImage(400, 300, BufferedImage.TYPE INT RGB); Graphics g = image.getGraphics(); g.setColor(new Color(0xFF, 0xFF, 0xFF)); g.fillRect(0, 0, 400, 300); }public void paintComponent(Graphics g) { g.drawImage(image, 0, 0, this); } public void mouseDragged(MouseEvent e) { Graphics g = image.getGraphics(); g.setColor(new Color(0, 0, 0)); g.fillOval(e.getX() - 5, e.getY() - 5, 5 , 5); repaint(); }public void mouseMoved(MouseEvent e) {} }

  • createImage()を使い コンパイル

    このプログラムをcreateImage()を使ってイメージを作りたいのですが自分で変更してもコンパイルできません><;どのように変更したらイメージをつくることができるのでしょうか?回答よろしくおねがいしまあす(^^; import java.awt.Color; import java.awt.Color; import java.awt.Graphics; import java.awt.Image; import java.awt.event.MouseEvent; import java.awt.event.MouseMotionListener; import java.awt.image.BufferedImage; import javax.swing.JComponent; import javax.swing.JFrame; class Test extends JComponent implements MouseMotionListener { public static void main(String[] args) { JFrame frame = new JFrame(); frame.getContentPane().add(new Test()); frame.setBounds(0 , 0 , 400 , 300); frame.setVisible(true); frame.setDefaultCloseOperation(JFrame.EXIT ON CLOSE); } Image image; public Test() { addMouseMotionListener(this); image = new BufferedImage(400, 300, BufferedImage.TYPE INT RGB); Graphics g = image.getGraphics(); g.setColor(new Color(0xFF, 0xFF, 0xFF)); g.fillRect(0, 0, 400, 300); }public void paintComponent(Graphics g) { g.drawImage(image, 0, 0, this); } public void mouseDragged(MouseEvent e) { Graphics g = image.getGraphics(); g.setColor(new Color(0, 0, 0)); g.fillOval(e.getX() - 5, e.getY() - 5, 5 , 5); repaint(); }public void mouseMoved(MouseEvent e) {} }

  • JButtonの画像をactionPerformedメソッド内で再描画

    JButtonの画像をactionPerformedメソッド内で再描画したい。 以下のソースのようにして、再描画したいのです。 setIconメソッドではなく、 JButtonに対して描画したものに対して再描画したいです。 Graphics2DクラスについてJAVA APIで調べましたが、 仕組の理解に至りませんでした。 仕組みと方法を教えて頂きたいです。 よろしくお願いいたします。 import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JComponent; import javax.swing.JFrame; public class test extends JFrame implements ActionListener{ JButton b= new JButton(); public static void main(String a[]) { new test(); } public test() { super(); this.setSize(100,100); b.addActionListener(this); b.add(new Zoom(new ImageIcon("img1.jpg"),0,0,50,50)); this.add(b); this.setVisible(true); } class Zoom extends JComponent { private static final long serialVersionUID = 1L; private ImageIcon icon = null; private int x = 0; private int y = 0; private int h = 0; private int w = 0; private double scale = 1.0d; public Zoom(ImageIcon icon, int x, int y, int w, int h) { super(); this.icon = icon; this.x = x; this.y = y; this.w = w; this.h = h; } public void paintComponent(Graphics g) { Graphics2D g2 = (Graphics2D) g; g2.scale(scale, scale); ////////////////////////////////// //画僧を再描画したい。 //g2.clearRect(0, 0, 80, 80);//× g2.drawImage(icon.getImage(), x, y, w, h, this); } } public void actionPerformed(ActionEvent e) { if(e.getSource()==b){ System.out.print("ok"); //this.repaint();//× //b.repaint();//× b.add(new Zoom(new ImageIcon("img2.jpg"),0,0,50,50));//(再描画できない) //b.setIcon(new ImageIcon("img2.jpg"));//ok(再描画出来る) } } }

    • ベストアンサー
    • Java
  • 上に色をつけるJPanelを作りたい

    つい先日も質問させていただきましたが、また分からないことがでてきたのでお聞きします。 JPanelのなかにOverlayLayoutで2枚のJPanel(上にglassPane、下にcontentPane)を配置し、overがtrueになったらglassPaneに色を書くようにしたいと思っています。 ですが、下のcontentPane部分にボタンなどがあると、その部分にうまく色がつきません。 どうすればいいのでしょうか。よろしくお願いします。 自分で組んでみたコードを示します。 ****** import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Test extends JLabel{ private JPanel glassPane; private JPanel contentPane = new JPanel(); private JButton button1 = new JButton("OverlayTest"); private boolean over = false; public Test(){ glassPane = new JPanel(){ @Override protected void paintComponent(final Graphics g) { super.paintComponent(g); if(!over)return; Graphics2D g2 = (Graphics2D) g; g2.setColor(new Color(Color.MAGENTA.getRed(), Color.MAGENTA.getGreen(), Color.MAGENTA.getBlue(), 150)); g2.fillRect(0, 0, this.getWidth(), this.getHeight()); } }; button1.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { setOver(!over); glassPane.repaint(); //glassPane.revalidate(); } }); contentPane.setLayout(new GridBagLayout()); contentPane.add(button1); glassPane.setOpaque(false); setLayout(new OverlayLayout(this)); add(glassPane); add(contentPane); } public void setOver(boolean over){ this.over = over; } public static void main(String[] args) { JFrame frame = new JFrame(); frame.add(new Test()); frame.setSize(500,400); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } }

    • ベストアンサー
    • Java
  • 内部クラスにする方法教えてください!

    import java.awt.*; import javax.swing.*; import java.awt.event.*; public class Line extends JPanel { int x0, y0, x1, y1; public static class WindowCloser extends WindowAdapter { public void windowClosing(WindowEvent e) { System.exit(0); } } public static class ClickTracker extends MouseAdapter { private Line line; public ClickTracker(Line enclosing) { line = enclosing; } public void mouseClicked(MouseEvent e) { line.x0 = line.x1; line.y0 = line.y1; line.x1 = e.getX(); // MouseEventクラスのgetXメソッドでマウスのx座標値を取得 line.y1 = e.getY(); // MouseEventクラスのgetYメソッドでマウスのx座標値を取得 line.repaint(); // ウィンドウの表示を再描画 } } public Line() { x0 = y0 = x1 = y1 = 0; addMouseListener(new ClickTracker(this)); JFrame frame = new JFrame(); frame.addWindowListener(new WindowCloser()); frame.getContentPane().add(this); frame.setSize(300,300); frame.setVisible(true); } public void paintComponent(Graphics g) { super.paintComponent(g); g.drawLine(x0, y0, x1, y1); } public static void main(String[] args) { Line c = new Line(); } } 上のプログラムのClickTrackerクラスを内部クラスに書き換えたいんですけどどなたか教えてください!

    • ベストアンサー
    • Java
  • javaについて質問

    import javax.swing.*; import java.awt.Color; import java.awt.Graphics; import java.awt.event.*; public class tt extends JFrame { public tt(){ setTitle("hogehoge"); setBounds( 10, 10, 300, 200); JButton btn1 = new JButton("続ける"); final JPanel p = new JPanel(); p.setBackground(Color.white); btn1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event){ } } ); p.add(btn1); getContentPane().add(p); } public static void main(String[] args){ tt test = new tt(); test.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); test.setVisible(true); /* 実際に表示する */ } } Graphics g; g.drawString("ほげさんじょう",130,120);を追加しても コンパイルが通りません。 どうすれば画面に文字列を表示するんですか? あとテキストフィールドを追加するさいに、座標していとかして追加できないんですか?