ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

Javaの課題丸投げコミュの親windowのデータを子windowに反映させる。〜続編

  • mixiチェック
  • このエントリーをはてなブックマークに追加
度々すいません(>_<)
前トピのおかげで自分の思い描いていたのができたんですけど、
少し改良したい部分ができたので質問させていただきました。

現在奮闘中ですが、なかなかうまくいかないので力を貸してください。
よろしくお願いしますm(_ _)m

〜現在のプログラム〜
【親window】
・"●"ボタンを押してから画面上をクリックすると●が描画され●の下には座標が表示される。※●は複数描画可能

・"Clear"、"All Clear"ボタンを押すと●を削除できる。
※最後に描画した●が画面上で消えないという不具合あり。

・右クリックで子windowを表示するか閉じるかの選択ができて、表示するを選ぶと子windowが出現する。

【子window】
・表になっていて、親windowで●を描画すると行が追加され、
A列→通し番号、B列→x座標、C列→y座標
が記入される。ちなみに親で●を削除すると行も削除される。


〜改良したいこと〜
【子window】
・表のデータを編集すると親windowの●の位置を移動できるようにしたい。
例)A列→3、B列(x)→37、C列(y)→45のデータがあったとする。これを、
A列→3、B列(x)→34、C列(y)→43に書き換えて、更新ボタンを押すと、
親の●の位置が書き換えた位置に移動する。

以上です!
getValueAtを使ってできそうな気がしたんですが、やってる内に頭の中が???ってなってしまいました(T_T)
どうか力を貸してください。おねがいします!


import java.applet.Applet;
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.Label;
import java.awt.MenuItem;
import java.awt.Point;
import java.awt.PopupMenu;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.InputEvent;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;

/*
<applet code="JaMous2.class"width=500 height=500>
</applet>
*/

//子window
class MyFrame extends JFrame {
/**
*
*/
private static final long serialVersionUID = 1L;
private JTable table;
private JScrollPane pane;
private DefaultTableModel model;

JaMous2 parentObj; //このMyFrameを呼び出したオブジェクトを入れる

public DefaultTableModel getTableModel() {
return model;
}


MyFrame(String title,JaMous2 obj){
super(title); //タイトル設定
parentObj=obj; //呼び出しオブジェクト設定


this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
model = new DefaultTableModel(0,3);



table = new JTable(model);
table.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS); //windowのサイズを変えた(最大化等)時の対応

pane = new JScrollPane(table);
this.add(pane,BorderLayout.CENTER); //表の位置

this.setSize(new Dimension(210,720)); //windowのサイズ

addWindowListener(new WindowAdapter(){ @SuppressWarnings("deprecation")
public void windowClosing(WindowEvent we){
hide(); //窓を消す
}
});
}
}





//親window
public class JaMous2 extends Applet implements MouseListener,MouseMotionListener,ActionListener{
/**
*
*/
private static final long serialVersionUID = 1L;
int [] x = new int[1000];
int [] y = new int[1000];
int x1=-1;
int y1;
int count, i;
int f=0;
Label lb1=new Label("x");
Label lb2=new Label("y");
Button bt1=new Button("●");
Button bt2=new Button("Clear");
Button bt3=new Button("All Clear");

PopupMenu a_pup;
MenuItem a_itm1,a_itm2;

MyFrame sonObj;



//リスナの登録
public void init(){
addMouseListener(this);
addMouseMotionListener(this);

add(lb1);
add(lb2);
add(bt1);
add(bt2);
add(bt3);
count=0;

//"●"ボタン。一度押すと●が描画できるようになる。もう一度押すと描画できないようになる。
bt1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
f++;
}
});

//"Clear"ボタン。一度押すと一番新しい●が消える。
bt2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e){
if(count!=0){
count--;
repaint();
DefaultTableModel model=sonObj.getTableModel();
model.removeRow(count);
}
repaint();
}
});

//"All Clear"ボタン。全消去
bt3.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e){
count=0;
repaint();
DefaultTableModel model=sonObj.getTableModel();
model.setRowCount(0);
}
});


//右クリックするとでるポップアップメニュー
a_pup=new PopupMenu();

a_itm1=new MenuItem("フレームを表示");
a_pup.add(a_itm1);
a_itm1.addActionListener(this);

a_itm2=new MenuItem("フレームを閉じる");
a_pup.add(a_itm2);
a_itm2.addActionListener(this);

add(a_pup);


//自分の参照をthisで渡す
sonObj=new MyFrame("座標計算表",this);
this.setSize(new Dimension(800,640));
}

//●・軸の定義
public void paint(Graphics g){
for(i=0; i<count; i++){
g.fillArc(x[i]-14,y[i]-15, 30, 30, 0, 360);
drawPoint(g,x[i],y[i]);
}
if(x1!=-1){
g.fillArc(x1-14,y1-15,30,30,0,360);
drawPoint(g,x1,y1);
}
g.drawLine(0,325,1020,325); // 直線
g.drawLine(510,0,510,650); // 直線
g.drawRect(0,0,1020,650); // 枠
g.setColor(Color.black);

}

// 座標を描画する
private void drawPoint(Graphics g1, int x, int y) {
Dimension d = getSize();
FontMetrics fm = g1.getFontMetrics();
String xy = (x-510) + "," + (-(y-325));
// 描画する場所を特定
// x
int sx = x - (fm.stringWidth(xy)/2);
// 左端がはみ出た場合
if(sx <= 0) sx = 0;
// 右端がはみ出た場合
if(sx + fm.stringWidth(xy) >= d.width) sx = d.width - fm.stringWidth(xy);

// y
int moveY = ((fm.getAscent() + fm.getDescent()) *2) - fm.getDescent();
int sy = y + moveY;
// 上がはみ出た場合
if(sy - fm.getAscent() <= 0) sy = fm.getAscent();
// 下がはみ出た場合
if(sy >= d.height) sy = d.height - fm.getDescent();

g1.drawString(xy, sx, sy);
}

public void mouseEntered(MouseEvent me){}
public void mouseExited(MouseEvent me){}
public void mouseClicked(MouseEvent me){}

//マウスを押すと●が出現
public void mousePressed(MouseEvent me){
if (f % 2 == 1){
x1 = me.getX();
y1 = me.getY();
repaint();
}
if(me.getModifiers()==InputEvent.BUTTON3_MASK){ //右ボタン押下
a_pup.show(this,me.getX(),me.getY()); //クリック位置にポップを表示
}
}

//マウスを放した場所に●を記録
public void mouseReleased(MouseEvent me){
if (f % 2 == 1){
if(count < 1000){
x[count] = me.getX();
y[count] = me.getY();
count ++;

//子windowのテーブルの行を追加する。
DefaultTableModel model = sonObj.getTableModel();
@SuppressWarnings("unused")
int a=me.getX()-510;
@SuppressWarnings("unused")
int b=-(me.getY()-325);
model.addRow(new Object[]{count,a, b});
repaint();
}
}
}

//マウスを押してる間●を動かせる
public void mouseDragged(MouseEvent me){
if (f % 2 == 1){
x1 = me.getX();
y1 = me.getY();
repaint();
}
}

//座標表示
public void mouseMoved(MouseEvent me){
Point point=me.getPoint();
lb1.setText("x:" + (point.x-510));
lb2.setText("y:" + (-(point.y-325)));
}

//子windowの出し入れ
@SuppressWarnings("deprecation")
public void actionPerformed(ActionEvent e) {
MenuItem itm=(MenuItem)e.getSource();
if(itm==a_itm1)sonObj.show(); //フレームを表示
if(itm==a_itm2)sonObj.hide(); //フレームを消去
}
}

コメント(0)

mixiユーザー
ログインしてコメントしよう!

Javaの課題丸投げ 更新情報

Javaの課題丸投げのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング