- - PR -
Javaアプリケーションでpaint()が呼ばれません。
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-09-08 14:00
java Graphics の描画で、以下のように
記述しているのですが、ウィンドウサイズを変更 したり最大化してもpaintメソッドが呼び出されなく 強制的にwindowActivatedで描画しても描画がされません その時、一瞬表示されるのですがまた消えてしまいます。 repaint()をすると同じく描画が消えてしまいます。 ご教授、宜しくお願いいたします。 public class Frame1 extends JFrame{ .... private JFrame getJFrame() { if (jFrame == null) { jFrame = new JFrame(); jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); jFrame.setMinimumSize(new Dimension(1280, 1024)); jFrame.setMaximumSize(new Dimension(1280, 1024)); jFrame.setResizable(true); jFrame.setIconImage(Toolkit.getDefaultToolkit().getImage(getClass().getResource("main.PNG"))); jFrame.setJMenuBar(getJJMenuBar()); jFrame.setSize(1280, 1000); jFrame.setContentPane(getJContentPane()); jFrame.setTitle("test"); jFrame.setVisible(false); jFrame.addWindowListener(new java.awt.event.WindowAdapter() { public void windowActivated(java.awt.event.WindowEvent e) { //draw(jTextField14.getText(),1); } }); } return jFrame; } private JPanel getJPanel2() { if (jPanel2 == null) { jPanel2 = new JPanel(); jPanel2.setLayout(null); jPanel2.setBounds(new Rectangle(0, 0, 1025, 880)); jPanel2.setBackground(Color.black); jPanel2.add(jLabel19, null); } return jPanel2; } public void draw(String s, int i) { Graphics g = jPanel2.getGraphics(); if (i == 0) { g.setColor(Color.black); g.fillRect(-1500, -1500, 3000, 3000); } if (s.length() > 0) { try { l = Integer.parseInt(s); } catch (Exception e) { e.printStackTrace(); } } if (l >= 0) { //Dxfdraw ddraw = new Dxfdraw(g, l); Canvas ddraw = new Dxfdraw(g, l); jPanel2.add(ddraw); } else { //Dxfdraw ddraw = new Dxfdraw(g, l); Canvas ddraw = new Dxfdraw(g); jPanel2.add(ddraw); } } public void paint(Graphics g){ draw(jTextField14.getText(), 1); System.out.println("paint()"); } public void update(Graphics g) { draw(jTextField14.getText(), 1); System.out.println("update()"); } } public class Dxfdraw extends Canvas { public Dxfdraw(Graphics g) { dpaint(g); // 描画 } public Dxfdraw(Graphics g, int i) { dpaint(g, i); // レイヤー指定描画 } .... public void paint(Graphics g) { System.out.println("paint2()"); } public void update(Graphics g) { System.out.println("update2()"); } } | ||||||||
|
投稿日時: 2006-09-08 14:16
コードをちゃんと検証した訳じゃないですけど。
てな風にしたら、どうなります?
| ||||||||
|
投稿日時: 2006-09-08 14:53
Edosson様
ご返答有難うございます。 実行してみましたが呼び出されませんでした。 printlnも出力されません。 レイアウトは jFrame -jContentPane -jPanel2 (描画対象) になっています。 宜しくお願いいたします。 | ||||||||
|
投稿日時: 2006-09-08 15:38
おや、こちらには返答がある。
http://www.javaroad.jp/bbs/answer.jsp?q_id=20060908134429135 おそらく、だけど。 Frame1クラスのインスタンスが生成されていないので、Frame1クラスで使われるクラスのupdate()が呼ばれない、ということでは。 [ メッセージ編集済み 編集者: mio 編集日時 2006-09-08 15:45 ] | ||||||||
|
投稿日時: 2006-09-08 16:44
mio様
ご返答有難うございます。 インスタンスはmainで生成しておりまして 下記の場合でも同様の動作をします。 Eclipse + VisualEditor で作成しています。 宜しくお願いいたします Test2.java メイン Gdraw.java 描画 --Test2.java-- package t; import java.awt.event.KeyEvent; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; import java.awt.Canvas; import java.awt.Event; import java.awt.BorderLayout; import javax.swing.SwingConstants; import javax.swing.SwingUtilities; import javax.swing.KeyStroke; import java.awt.Point; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JMenuItem; import javax.swing.JMenuBar; import javax.swing.JMenu; import javax.swing.JFrame; import javax.swing.JDialog; import java.awt.GridBagLayout; public class Test2 { private JFrame jFrame = null; private JPanel jContentPane = null; private JMenuBar jJMenuBar = null; private JMenu fileMenu = null; private JMenu editMenu = null; private JMenu helpMenu = null; private JMenuItem exitMenuItem = null; private JMenuItem aboutMenuItem = null; private JMenuItem cutMenuItem = null; private JMenuItem copyMenuItem = null; private JMenuItem pasteMenuItem = null; private JMenuItem saveMenuItem = null; private JDialog aboutDialog = null; private JPanel aboutContentPane = null; private JLabel aboutVersionLabel = null; private JPanel jPanel = null; /** * This method initializes jPanel * * @return javax.swing.JPanel */ private JPanel getJPanel() { if (jPanel == null) { jPanel = new JPanel(); jPanel.setLayout(new GridBagLayout()); } return jPanel; } /** * @param args */ public static void main(String[] args) { // TODO 自動生成されたメソッド・スタブ SwingUtilities.invokeLater(new Runnable() { public void run() { Test2 application = new Test2(); application.getJFrame().setVisible(true); } }); } /** * This method initializes jFrame * * @return javax.swing.JFrame */ private JFrame getJFrame() { if (jFrame == null) { jFrame = new JFrame(); jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); jFrame.setJMenuBar(getJJMenuBar()); jFrame.setSize(300, 200); jFrame.setContentPane(getJContentPane()); jFrame.setTitle("Application"); } return jFrame; } /** * This method initializes jContentPane * * @return javax.swing.JPanel */ private JPanel getJContentPane() { if (jContentPane == null) { jContentPane = new JPanel(); jContentPane.setLayout(new BorderLayout()); jContentPane.add(getJPanel(), BorderLayout.CENTER); } return jContentPane; } /** * This method initializes jJMenuBar * * @return javax.swing.JMenuBar */ private JMenuBar getJJMenuBar() { if (jJMenuBar == null) { jJMenuBar = new JMenuBar(); jJMenuBar.add(getFileMenu()); jJMenuBar.add(getEditMenu()); jJMenuBar.add(getHelpMenu()); } return jJMenuBar; } /** * This method initializes jMenu * * @return javax.swing.JMenu */ private JMenu getFileMenu() { if (fileMenu == null) { fileMenu = new JMenu(); fileMenu.setText("File"); fileMenu.add(getSaveMenuItem()); fileMenu.add(getExitMenuItem()); } return fileMenu; } /** * This method initializes jMenu * * @return javax.swing.JMenu */ private JMenu getEditMenu() { if (editMenu == null) { editMenu = new JMenu(); editMenu.setText("Edit"); editMenu.add(getCutMenuItem()); editMenu.add(getCopyMenuItem()); editMenu.add(getPasteMenuItem()); } return editMenu; } /** * This method initializes jMenu * * @return javax.swing.JMenu */ private JMenu getHelpMenu() { if (helpMenu == null) { helpMenu = new JMenu(); helpMenu.setText("Help"); helpMenu.add(getAboutMenuItem()); } return helpMenu; } /** * This method initializes jMenuItem * * @return javax.swing.JMenuItem */ private JMenuItem getExitMenuItem() { if (exitMenuItem == null) { exitMenuItem = new JMenuItem(); exitMenuItem.setText("Exit"); exitMenuItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { System.exit(0); } }); } return exitMenuItem; } /** * This method initializes jMenuItem * * @return javax.swing.JMenuItem */ private JMenuItem getAboutMenuItem() { if (aboutMenuItem == null) { aboutMenuItem = new JMenuItem(); aboutMenuItem.setText("About"); aboutMenuItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { JDialog aboutDialog = getAboutDialog(); aboutDialog.pack(); Point loc = getJFrame().getLocation(); loc.translate(20, 20); aboutDialog.setLocation(loc); aboutDialog.setVisible(true); } }); } return aboutMenuItem; } /** * This method initializes aboutDialog * * @return javax.swing.JDialog */ private JDialog getAboutDialog() { if (aboutDialog == null) { aboutDialog = new JDialog(getJFrame(), true); aboutDialog.setTitle("About"); aboutDialog.setContentPane(getAboutContentPane()); } return aboutDialog; } /** * This method initializes aboutContentPane * * @return javax.swing.JPanel */ private JPanel getAboutContentPane() { if (aboutContentPane == null) { aboutContentPane = new JPanel(); aboutContentPane.setLayout(new BorderLayout()); aboutContentPane.add(getAboutVersionLabel(), BorderLayout.CENTER); } return aboutContentPane; } /** * This method initializes aboutVersionLabel * * @return javax.swing.JLabel */ private JLabel getAboutVersionLabel() { if (aboutVersionLabel == null) { aboutVersionLabel = new JLabel(); aboutVersionLabel.setText("Version 1.0"); aboutVersionLabel.setHorizontalAlignment(SwingConstants.CENTER); } return aboutVersionLabel; } /** * This method initializes jMenuItem * * @return javax.swing.JMenuItem */ private JMenuItem getCutMenuItem() { if (cutMenuItem == null) { cutMenuItem = new JMenuItem(); cutMenuItem.setText("Cut"); cutMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X, Event.CTRL_MASK, true)); } return cutMenuItem; } /** * This method initializes jMenuItem * * @return javax.swing.JMenuItem */ private JMenuItem getCopyMenuItem() { if (copyMenuItem == null) { copyMenuItem = new JMenuItem(); copyMenuItem.setText("Copy"); copyMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C, Event.CTRL_MASK, true)); } return copyMenuItem; } /** * This method initializes jMenuItem * * @return javax.swing.JMenuItem */ private JMenuItem getPasteMenuItem() { if (pasteMenuItem == null) { pasteMenuItem = new JMenuItem(); pasteMenuItem.setText("Paste"); pasteMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V, Event.CTRL_MASK, true)); } return pasteMenuItem; } /** * This method initializes jMenuItem * * @return javax.swing.JMenuItem */ private JMenuItem getSaveMenuItem() { if (saveMenuItem == null) { saveMenuItem = new JMenuItem(); saveMenuItem.setText("Save"); saveMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, Event.CTRL_MASK, true)); saveMenuItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent e) { Canvas can = new Gdraw(jPanel.getGraphics()); jPanel.add(can); } }); } return saveMenuItem; } } --END-- --Gdraw.java-- package t; import java.awt.Canvas; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.geom.Line2D; public class Gdraw extends Canvas { public Gdraw(Graphics g){ paint(g); } public void paint(Graphics g){ Graphics2D g2 =(Graphics2D)g; line(g2); } public void line(Graphics2D g){ g.draw(new Line2D.Double(10.11,12.0,50.2,60.0)); } } --END-- | ||||||||
|
投稿日時: 2006-09-08 16:53
マルチポストという言葉自体知らないみたいですね。
邪推だけどmioさんのリンクは皮肉のつもりじゃないだろうか、違っていたらすいません | ||||||||
|
投稿日時: 2006-09-08 17:14
そうですねmioさんの嫌がらせでしょうね。関連性のあるサイト、リンクが張られているとか以外は多少のマルチポストはOKだと私は思います。そのほうが多くの人の目にとまりますからね。公共の場に私事を言う方はいりません。
| ||||||||
|
投稿日時: 2006-09-08 17:22
それだったら最初にどこで同様の質問をしたのかすべて書いておけばいいだろ。 それをせずに >関連性のあるサイト、リンクが張られているとか以外は多少のマルチポストはOKだと私は思います >そのほうが多くの人の目にとまりますからね。 だなんてよくも言えたもんだな。 多くの目にとまらせるにはすべてのスレッドで正しい回答が必要ってことだぞ。 最近自己厨があちらこちらにいて大変だな。 |