JavaのJDesktoppaneでGraphを描画する方法

このQ&Aのポイント
  • JavaのJDesktoppaneを使ってGraphicsで円やラインを描画することは可能ですか?
  • 現在Javaでマインドマップ作成ツールを開発しており、JDesktoppaneの上にJPanelやJInternalFrameを表示させることでマインドマップの葉の追加やテキストの変更を行っています。しかし、ラインを描画することができません。ソースコードは正しく記述されていると思われますが、ラインが表示されません。
  • マインドマップの葉は表示されるが、ラインが表示されない問題があります。ヘルプが必要です。
回答を見る
  • ベストアンサー

いきなりなのですが、JavaのJDesktoppaneの上にGraph

いきなりなのですが、JavaのJDesktoppaneの上にGraphicsで円やラインを描画することはできるでしょうか? というのも、現在Javaでマインドマップ作成ツールを開発しており、JDesktoppaneの上にJPanelやJInternalFrameを 表示させることで、マインドマップの葉の追加や葉に対するテキストの変更を行っているのですが、葉同士をつなぐ ラインを描画しようとしたところ、うまく描画することができませんでした。 ソースコード自体は以下のような感じでやろうと考えています。 panel = new JDesktopPane(); this.getContentPane().add(panel); g = panel.getGraphics(); g.setColor(Color.RED); g.drawLine(10, 10, 120, 40); panel.add(new CubeMindmapLeaf()); //ルートの葉を作成 しかし、マインドマップの葉自体はうまく表示できるのですが、ラインがうまく表示されません。 どなたかお分かりになる方がいらっしゃいましたら、ご回答のほどよろしくお願いします。

  • Java
  • 回答数1
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • PecoPlus
  • ベストアンサー率76% (144/188)
回答No.1

 こんにちは。  こっちで、似たようなことをしてので、参考にしてみてください。   ↓ http://okwave.jp/qa/q6048346.html

参考URL:
http://okwave.jp/qa/q6048346.html
yasudoas
質問者

お礼

回答ありがとうございます!参考にしてみます。

関連するQ&A

  • GradientPaint を JPaneに仕組む

    JPaneにGradientPaint を使って書いたグラデーションを表示させたいのですが、 Jlabelのようにaddで追加できず、実装方法が解りません。 アドバイスをいただけないでしょうか? protected void paintComponent(Graphics g) { JPanel panel = new JPanel(); Graphics2D g2 = (Graphics2D)g; GradientPaint gp = new GradientPaint(10,10,Color.ORANGE,60,60,Color.GREEN); g2.setPaint(gp); g2.fillRect(10, 10, 100, 100); JLabel label = new JLabel("Hello World!!"); getContentPane().add(label); Container contentPane = getContentPane(); contentPane.add(panel); }

    • ベストアンサー
    • Java
  • 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) {} }

  • JAVAのプロフラミングについて

    □、○、△のボタンがあり、それぞれのボタンについて 一回押すと、その押したボタンの図形を2個描き、 押すたびに永久的に増えていくというようなプログラム を作りたいのですが、ここからどのようにすればいいのか教えてください。 import java.awt.*; import java.applet.*; import java.awt.event.*; public class kadaiApplet232 extends Applet implements ActionListener { int square = 0; int circle = 0; int triangle = 0; Button squareButton, circleButton,triangleButton; public void init(){ squareButton = new Button("□"); squareButton.addActionListener(this); add(squareButton); circleButton = new Button("○"); circleButton.addActionListener(this); add(circleButton); triangleButton = new Button("△"); triangleButton.addActionListener(this); add(triangleButton); } public void paint(Graphics g){ if(){ g.drawRect(30, 30, square, square); } if(){ g.drawOval(60,30,circle,circle); } if(){ g.drawLine(90+(int)(triangle/2),30,90,30+triangle); g.drawLine(90,30+triangle,90+triangle,30+triangle); g.drawLine(90+triangle,30+triangle,90+(int)(triangle/2),30); } } public void actionPerformed(ActionEvent e){ if ( e.getSource() == squareButton){ square = 30; } else if ( e.getSource() == circleButton){ circle = 30; } else if (e.getSource() == triangleButton){ triangle = 30; } repaint(); } }

    • ベストアンサー
    • Java
  • Java、jPanelに描画する

    お世話になっています。 Java言語を始め、オブジェクト指向というなれない環境にいます。(今まではBASICを利用) 今回、jPanelなるものを使い、その中に四角形などを描画したいのですが、 うまくいきません。 public void paintComponent(){ Graphics pnl = panel.getGraphics(); pnl.setColor(new Color(0,0,255)); pnl.drawOval(100,100,50,50); } こういう関数を作り、プログラムから呼び出しています。(フレーム作成時には表示しない) おそらくこの辺りがダメだと思うのですが、よくわかりません。 すいませんが、jPanelの使い方を詳しく教えていただけないでしょうか。 ゲームを作る課題なのですが、ここで詰まってしまい進めません。 ご存じの方がいらっしゃいましたら、ご教授ください。 よろしくお願い致します。

    • ベストアンサー
    • 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);を追加しても コンパイルが通りません。 どうすれば画面に文字列を表示するんですか? あとテキストフィールドを追加するさいに、座標していとかして追加できないんですか?

  • javaアプレットで波線描画あとに、これを戻す

    よろしくお願いします。 いま、サイトを参考にしながら、波線を表示してみたのですが、以降のdrawLineメソッドなどでの線も全て点線になってしまいます。 これは、setColorなどで色がそのままになるのと同じことだと思うのですが、どのように戻せば良いのでしょうか。 float pattern[] = {5.0f, 4.0f}; BasicStroke dash = new brokenLine(1.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 3.0f, pattern, 0.0f); g2.setStroke(brokenLine); g2.draw(new Line2D.Double(50, 100, 500, 100); このあとに、drawLineメソッド等で通常通りの線を描きたいのです。 詳しい方、ごしなんよろしくお願いします。

    • ベストアンサー
    • Java
  • javaのpanelが表示されません

    下記のプログラムを作ったんですが、eclipseで実行するとフレームは表示されますが、空のフレームのような状態で、panelやボタンなどは表示されません。mainとは別のクラスで作成してるからなんでしょうか?よろしくお願いします。 import java.awt.BorderLayout; import java.awt.Container; import java.awt.Dimension; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.table.DefaultTableModel; public class Table0 { public static void main(String[] args) { new Frame0(); } } class Frame0{ JFrame frame; JPanel panel; JScrollPane jsp; JTable table; DefaultTableModel dtm; public Frame0(){ frame=new JFrame("table"); frame.setBounds(30, 30, 300, 200); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); table=new JTable(8,5); jsp=new JScrollPane(table); jsp.setPreferredSize(new Dimension(250, 70)); panel=new JPanel(); panel.add(jsp); Container c=frame.getContentPane(); c.add(panel,BorderLayout.CENTER); } }

    • ベストアンサー
    • Java
  • JavaでのSwingを使った簡易電卓作成

    Javaについて勉強中の学生です。 よろしくお願いします。 CGIによるプログラムは一通り勉強しました。 次にGUIによるプログラムを勉強中です。 そこで電卓を作ってみようと思いましたが、よくわからないところがあります。 ご教示いただければ幸いです。 一応外見だけは作ることができましたが、イベントを登録するときに電卓のボタンをbtn1,btn2,btn3…とすればイベントを登録することはできるのですが、それだとボタンの分だけ作成しなければならず修正を加えるのが大変になってしまいます。 例)btn1.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent ae){ hyozi.setText(hyozi.getText() + "1"); } } そこで「btn」に統一しボタンに表示されている文字列を使い簡潔にプログラムをまとめたいのですがどのようにすればよいのかわかりません。以下のプログラムに追加できるようなものを教えていただけないでしょうか? import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Dentaku{ private JFrame frame; private JPanel panel_fun,panel_ten; private JTextField hyozi; private JButton btn; public Dentaku(){ //フレームの作成してレイアウトをセット frame = new JFrame("簡易電卓プログラム"); frame.setLayout(new BorderLayout()); //パネルを作成してレイアウトをセット panel_fun = new JPanel(); panel_fun.setLayout(new GridLayout(2,3)); panel_ten = new JPanel(); panel_ten.setLayout(new GridLayout(4,3)); //表示用テキストボックスを作成 hyozi = new JTextField(); //電卓のボタンを作成 panel_fun.add(btn = new JButton("CA")); panel_fun.add(btn = new JButton("+")); panel_fun.add(btn = new JButton("-")); panel_fun.add(btn = new JButton("*")); panel_fun.add(btn = new JButton("/")); panel_fun.add(btn = new JButton("=")); panel_ten.add(btn = new JButton("1")); panel_ten.add(btn = new JButton("2")); panel_ten.add(btn = new JButton("3")); panel_ten.add(btn = new JButton("4")); panel_ten.add(btn = new JButton("5")); panel_ten.add(btn = new JButton("6")); panel_ten.add(btn = new JButton("7")); panel_ten.add(btn = new JButton("8")); panel_ten.add(btn = new JButton("9")); panel_ten.add(btn = new JButton("0")); //フレームに表示用テキストボックスをセット(BorderLayoutの北側) frame.add(hyozi,BorderLayout.NORTH); //フレームにパネルをセット(BorderLayoutの中央,南側) frame.add(panel_fun,BorderLayout.CENTER); frame.add(panel_ten,BorderLayout.SOUTH); //フレームの詳細設定 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(300,250); frame.setVisible(true); } //mainメソッドの定義 public static void main(String[] args){ Dentaku application = new Dentaku(); } }

    • ベストアンサー
    • Java
  • またまたすいません、Javaについて質問です

    閲覧ありがとうございます。 現在Javaで簡単なお絵描きソフトを作成しているのですが、ResetButtonを押すと 画面をクリアしたいのですが、ResetButtonを押すと画面はクリアしますが、何故か 左上にResetButtonが描画されてしまいます・・・何故でしょうか? ソースは以下の通りです。(また文字数制限に引っかかったので、一部省略してかいてあります。) import java.awt.event.*; import java.awt.*; import javax.swing.*; /*+++ メインクラス +++*/ public class java_test_04 extends JFrame implements ActionListener { int x1, y1; //描画始点 int x2, y2; //描画次点 MyPanel mp = new MyPanel(); //マイパネルを作成 JButton resetButton = new JButton("Reset"); //リセットボタンを作成 Dimension size; public static void main(String[] args) { new java_test_04(); } public java_test_04() { setLayout(null); setTitle("お絵かき"); //フレームタイトルを設定 setSize(400, 400); //フレームサイズを設定 /*+++ リセットボタンの設定 +++*/ resetButton.setBounds(0, 300, 70, 25); //リセットボタンの表示座標・サイズを設定 resetButton.addActionListener(this); //リセットボタンにアクションイベントを追加 getContentPane().add(resetButton); //リセットボタンを追加 /*+++ マイパネルの設定 +++*/ size = Toolkit. getDefaultToolkit(). getScreenSize(); //フレームのサイズを取得 mp.setBackground(Color.red); //マイパネルの背景色を青に mp.setBounds(0, 0, size.width, 250); //マイパネルの表示座標・サイズを設定 getContentPane().add(mp); //マイパネルを追加 setVisible(true); //フレームを表示 setDefaultCloseOperation(EXIT_ON_CLOSE); //クローズ処理 } @Override public void actionPerformed(ActionEvent arg0) { if (resetButton == arg0.getSource()) { //リセットボタンが押されたら mp.repaint(); //グラフィックをリセット try { Thread.sleep(100); } catch(Exception ex) { System.out.println("[ERR!]" + ex); } } } /*+++ マイパネルクラス +++*/ class MyPanel extends JPanel implements MouseListener,MouseMotionListener{ private static final long serialVersionUID = 1L; MyPanel() { addMouseMotionListener(this); //マウスモーションイベントを追加 addMouseListener(this); //マウスイベントを追加 } /*+++ マウスを押したとき +++*/ public void mousePressed(MouseEvent e) { e.consume(); x1 = x2 = e.getX(); y1 = y2 = e.getY(); paintComponent(getGraphics()); } /*+++ マウスをドラッグしているとき +++*/ public void mouseDragged(MouseEvent e) { e.consume(); x2 = e.getX(); y2 = e.getY(); paintComponent(getGraphics()); //描画 x1 = e.getX(); //これが新たな y1 = e.getY(); //始点となる } /*+++ マウスが動いているとき +++*/ public void mouseMoved(MouseEvent e) { } /*+++ マウスボタンが離されたとき +++*/ public void mouseReleased(MouseEvent e) { } /*+++ マウスがフレーム内に入ったとき +++*/ public void mouseEntered(MouseEvent e) { } /*+++ マウスがフレーム外に出たとき +++*/ public void mouseExited(MouseEvent e) { } /*+++ マウスがクリックされたとき +++*/ public void mouseClicked(MouseEvent e) { } /*+++ ペイントメソッド +++*/ public void paintComponent(Graphics g) { g.drawLine(x1, y1, x2, y2); } } }

    • ベストアンサー
    • Java