- PR -

数値の反映の方法

1
投稿者投稿内容
Anemous
会議室デビュー日: 2007/11/27
投稿数: 4
投稿日時: 2007-11-29 15:17
再び問題にあたってしまったため質問させていただきたいと思います。

現在作っているプログラムの「パレット」と呼ばれる部分のテキストフィールドに入力した数値をメインの方へ反映させたいのですがうまくいきません。
また同じパレットの方にあるコンボボックスも、どのように番号振り(?)したら良いかわからず困っています。

・パレットにある「セルサイズ」「列×行」のテキストフィールドに数値を入力するとメインのマスのサイズやマスの配列数が変化
・コンボボックスの図形や色を選択することでメインで対応した色や図形を塗る事ができる

こういう方法を取った方がいいなどありましたらご教授していただければ幸いです。

ソースは3つに分かれていてそれぞれ「Zahyou.java」「MainPanel.java」「PaletteDialog,java」となっています。「Zahyou.java」がメインのプログラムとなっており、「Zahyou.java」をコンパイルすれば全てコンパイルされます。
起動後、大きいウィンドウが「メイン」、小さい横長のウィンドウが「パレット」です。

以下がソースになります。

FileName:Zahyou.java

import java.awt.Container;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.filechooser.FileFilter;

import java.io.*;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.PrintWriter;

public class Zahyou extends JFrame{
public MainPanel mainPanel;
public PaletteDialog paletteDialog;

public JMenuItem saveItem;
public JMenuItem exitItem;

public static int row, col;

public JScrollPane scrollPane;
public JFileChooser fileChooser = new JFileChooser(".");

public Zahyou(){
setTitle("MainPanel");

MainPanel panel = new MainPanel();
Container contentPane = getContentPane();
contentPane.add(panel);

initGUI();

pack();
}

public void initGUI() {
paletteDialog = new PaletteDialog(this);
paletteDialog.setVisible(true);

mainPanel = new MainPanel(paletteDialog);

scrollPane = new JScrollPane(mainPanel);
Container contentPane = getContentPane();
contentPane.add(scrollPane);

JMenu fileMenu = new JMenu("メニュー");
saveItem = new JMenuItem("保存");
exitItem = new JMenuItem("終了");

fileMenu.add(saveItem);
fileMenu.add(exitItem);

saveItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
saveItem();
}
});

exitItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
exitMap();
}
});

JMenuBar menuBar = new JMenuBar();
menuBar.add(fileMenu);
setJMenuBar(menuBar);
}

public void saveItem(){
try{
FileOutputStream out1 = new FileOutputStream("zahyou.txt");
PrintWriter writer1 = new PrintWriter(out1);
//FileOutputStream out2 = new FileOutputStream("zusi.txt");
//PrintWriter writer2 = new PrintWriter(out2);

int k, i, j, w;
k = MainPanel.MASU;
i = 10;
j = 0;
int[][] x = new int[1000][1000];

for(i=0;i<k;i++){
for(j=0;j<k;j++){
if(MainPanel.board[i][j] == MainPanel.BLANK){
w = 0;
}else if(MainPanel.board[i][j] == MainPanel.BLACK){
w = 1;
}else{
w = 2;
}
x[i][j] = w;
}
}

writer1.println(PaletteDialog.w3);
for(i=0;i<k;i++){
for(j=0;j<k;j++){
writer1.print(i);
writer1.print(',');
writer1.print(j);
writer1.print(',');
writer1.print(x[i][j]);
writer1.print(' ');
//writer2.print(x[i][j]);
//writer2.print(' ');

if(j==k-1){
writer1.println();
//writer2.println();
}
}
}
writer1.flush();
//writer2.flush();
out1.close();
//out2.close();
}catch (IOException e){
e.printStackTrace();
}
}

public void exitMap(){
System.exit(0);
}

public static void main(String[] args){
Zahyou frame = new Zahyou();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}

//--------------------------------------------------------------------------
FileName:MainPanel.java

import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import javax.swing.*;
import java.lang.String;

import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import javax.swing.JPanel;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;

public class MainPanel extends JPanel implements MouseListener,MouseMotionListener{

public static int GS = 10 //パレットで入力した数値を
public static int MASU = 60 //ここのGSとMASUの数値に反映させたい
//public static int GS = PaletteDialog.w1;
//public static int MASU = PaletteDialog.w2;

public static int WIDTH = GS * MASU;
public static int HEIGHT = WIDTH;

public static int BLANK = 0;
public static int BLACK = 1;
public static int RED = 2;
public static int BLUE = 3;

public static int[][] board = new int[MASU][MASU];

public PaletteDialog paletteDialog;
public Image[] mapChipImages;

public MainPanel(PaletteDialog paletteDialog) {
setPreferredSize(new Dimension(WIDTH, HEIGHT));

addMouseListener(this);
addMouseMotionListener(this);

this.paletteDialog = paletteDialog;
mapChipImages = paletteDialog.getMapChipImages();
}

public MainPanel(){
setPreferredSize(new Dimension(WIDTH, HEIGHT));

initBoard();
addMouseListener(this);
}

public void paintComponent(Graphics g){
super.paintComponent(g);


drawBoard(g);
drawSeru(g);
}

public void mouseClicked(MouseEvent e){
int x = e.getX() / GS;
int y = e.getY() / GS;

putDownSeru(x, y);

repaint();
}

public void initBoard(){
for(int y = 0; y < MASU; y++){
for(int x = 0; x < MASU; x++){
board[y][x] = BLANK;
}
}
}

public void drawBoard(Graphics g){
g.setColor(new Color(255, 255, 255));
g.fillRect(0, 0, WIDTH, HEIGHT);

for(int y = 0; y < MASU; y++){
for(int x = 0; x < MASU; x++){

g.setColor(Color.BLACK);
g.drawRect(x * GS, y * GS, GS, GS);
}
}
}

public void drawSeru(Graphics g){
for(int y = 0; y < MASU; y++) {
for(int x = 0; x < MASU; x++){
if(board[y][x] == BLANK){
continue;
}else if(board[y][x] == BLACK){
g.setColor(Color.BLACK);
}else if(board[y][x] == RED){
g.setColor(Color.RED);
}else if(board[y][x] == BLUE){
g.setColor(Color.BLUE);
}

g.fillRect(x * GS , y * GS , GS , GS);
}
}
}

public void putDownSeru(int x, int y){
int c;

//c = BLANK;
c = BLACK;

//コンボボックスで色が指定できるようになれば以下のif文で指定して色を変える
// 色を塗る
/*if(board[y][x] == BLANK){
c = BLACK;
}else if(board[y][x] == BLACK){
c = RED;
}else if(board[y][x] == RED){
c = BLUE;
}*/
board[y][x] = c;
}

public void mousePressed(MouseEvent e){
}

public void mouseEntered(MouseEvent e){
}

public void mouseExited(MouseEvent e){
}

public void mouseReleased(MouseEvent e){
}

public void mouseDragged(MouseEvent e){
int x = e.getX() / GS;
int y = e.getY() / GS;

putDownSeru(x, y);

repaint();
}

public void mouseMoved(MouseEvent e){
}
}

//---------------------------------------------------------------
FileName:PaletteDialog.java

import java.io.*;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.ImageIcon;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JPanel;

import java.awt.*;
import java.awt.event.*;
import java.lang.String;
import java.awt.event.ActionListener;

import javax.swing.*;
import javax.swing.event.*;
import javax.swing.ButtonGroup;
import javax.swing.JRadioButton;

import java.awt.event.ActionEvent;
import java.util.*;

public class PaletteDialog extends JDialog{

public Image[] mapChipImages;

Label lb1,lb2,lb3,lb4;

public static int w1,w2,w3,w4;
public static int a1,a2,a3,a4;

public PaletteDialog(JFrame owner){

super(owner, "Palet", false);
setSize(200, 300);
setResizable(false);
setLayout(new FlowLayout());

Choice a = new Choice();
Choice b = new Choice();

a.add("自由");
a.add("円");

b.add("黒");
b.add("赤");
b.add("青");
b.add("消しゴム");


lb1 = new Label("セルサイズ");
lb1.setBounds(25,50,25,18);
this.add(lb1);
TextField c1 = new TextField("10",10);
getContentPane().add(c1);

w1 = Integer.parseInt(c1.getText());

lb2 = new Label("列×行");
lb2.setBounds(25,50,25,18);
this.add(lb2);
TextField c2 = new TextField("60",10);
getContentPane().add(c2);

w2 = Integer.parseInt(c2.getText());

lb3 = new Label("");
lb3.setBounds(25,50,25,18);
this.add(lb3);
TextField c3 = new TextField("10",10);
getContentPane().add(c3);

w3 = Integer.parseInt(c3.getText());

lb4 = new Label("");
lb4.setBounds(25,50,25,18);
this.add(lb4);
TextField c4 = new TextField("10",10);
getContentPane().add(c4);

w4 = Integer.parseInt(c4.getText());

add(a);

add(b);

show();
pack();

}
public Image[] getMapChipImages(){
return mapChipImages;
}
}
ranco
大ベテラン
会議室デビュー日: 2007/11/02
投稿数: 112
投稿日時: 2007-11-29 19:24
いずれの要求も、ActionListenerの中でメインとやらのメソッドを呼び出すだけです。
myMain.どこそこの色を変えろ(赤);
とかね。
もちろんそのためにはパレットはメインの参照を事前にもらっていなければなりません。

ソースは長すぎるので、拝見しておりません。
1

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