- PR -

JSplitPaneのpanelの扱い方

1
投稿者投稿内容
KDS
常連さん
会議室デビュー日: 2005/07/15
投稿数: 38
投稿日時: 2005-12-14 13:53
いつもお世話になっています。
今回はJSplitPaneを使い画面を分割した片方の事についてなのですが、
問題になった方の画面は、

画面に画像を取り込む
    ↓
その画像にフリーラインで描く
    ↓
そのフリーラインをClearで消す

と言う処理をしたいのですが、
そのClearの処理がうまくいかないのです。
ラインだけ消そうと思ったら、
ただ単にrepaint();だけでは出来なくて。。。


一応コードも載せてみます。。

コード:

	private JPanel createPanel1() {

		final JPanel panel = new JPanel() {

			public void paintComponent(Graphics g) {
				super.paintComponent(g);
				((Graphics2D) g).drawImage(image, 0, 0, this);
			}
		};

		panel.setLayout(null);

		final JButton btnClear = new JButton("Clear");
		btnClear.setLocation(100, 0);
		btnClear.setSize(80, 25);
		panel.add(btnClear);

		image = new BufferedImage(600, 500, BufferedImage.TYPE_INT_RGB);
		Graphics2D g = (Graphics2D) image.getGraphics();
		g.setColor(panel.getBackground());
		g.fillRect(0, 0, 600, 500);
		g.dispose();

		panel.addMouseMotionListener(new MouseMotionAdapter() {
			public void mouseDragged(MouseEvent e) {
				p1.setLocation(p2);
				p2.setLocation((double) e.getX(), (double) e.getY());
				if (image == null) {
					Dimension d = panel.getSize();
					int w = d.width;
					int h = d.height;
					image = (BufferedImage) panel.createImage(w, h);
				}
				Graphics2D imageGraphics = (Graphics2D) image.createGraphics();
				imageGraphics.setStroke(new BasicStroke(3.0F));
				imageGraphics.setPaint(Color.black);
				if (flag) {
					imageGraphics.drawImage(image, 0, 0, null);
					flag = false;
				}
				if (!p1.equals(p2)) {
					line.setLine(p1, p2);
					imageGraphics.draw(line);
					p1.setLocation(p2);
				}
				imageGraphics.dispose();
				repaint();
			}
		});

		panel.addMouseListener(new MouseAdapter() {
			public void mousePressed(MouseEvent e) {
				p1.setLocation((double) e.getX(), (double) e.getY());
				p2.setLocation(p1);
			}
		});
		
		btnClear.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				repaint();
			}
		});
		
		return panel;
	}


山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2005-12-14 14:14
JSplitPaneを使わない場合はうまくいくということですよね?
KDS
常連さん
会議室デビュー日: 2005/07/15
投稿数: 38
投稿日時: 2005-12-14 15:53
そうですね。
JSplitPaneを使っていない場合は、
AWTで作っていて、Swingでは作ってませんでした。

ちなみにAWTではうまく動きました。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2005-12-14 16:04
JSplitPane の使い方に問題があるかどうかは切り分けられていない、という事ですね?
#質問内容を読むと JSplitPane を使った場合だけ問題が発生する風にも見えますが
まずは JSplitPane を使わずに(Swingを使って)問題が発生するかどうか切り分けて、質問内容を整理してみてはいかがでしょうか。
KDS
常連さん
会議室デビュー日: 2005/07/15
投稿数: 38
投稿日時: 2005-12-16 02:55
インギさん回答ありがとうございます

正直に申しあげますと、
JSplitPaneを外してSwingだけで作ることが出来ませんでした。。。
なので、質問を変えさせて頂きます。。(すいません)

画面に画像を取り込む
    ↓
その画像にフリーラインで描く
    ↓
そのフリーラインをClearで消す

このClearの処理を
コード:
JMenu editMenu = new JMenu("Edit");
JMenuItem clearItem = new JMenuItem("Clear");
clearItem.addActionListener(new ActionListener() {
	public void actionPerformed(ActionEvent event) {
		panel.repaint();
	}
});
editMenu.add(clearItem);



としているのですが、

Clearした時にエラーメッセージが出てしまいました。
何処を変えたらよいか分かる方いらっしゃいますか??

panel.repaint();
でpanel上のフリーラインを消したいのです。。

コード:
java.lang.NullPointerException
	at Mtis4.actionPerformed(Mtis4.java:118)
	at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
	at javax.swing.AbstractButton$ForwardActionEvents.actionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
	at javax.swing.AbstractButton.doClick(Unknown Source)
	at javax.swing.plaf.basic.BasicMenuItemUI.doClick(Unknown Source)
	at javax.swing.plaf.basic.BasicMenuItemUI$MouseInputHandler.mouseReleased(Unknown Source)
	at java.awt.Component.processMouseEvent(Unknown Source)
	at java.awt.Component.processEvent(Unknown Source)
	at java.awt.Container.processEvent(Unknown Source)
	at java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)


Kissinger
ぬし
会議室デビュー日: 2002/04/30
投稿数: 428
お住まい・勤務地: 愛知県
投稿日時: 2005-12-16 09:56
KDSさん、こんにちは。

NullPointerExceptionが出ているというのに原因が
わからないのですか?
1

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