2016-10-17 14 views
0

私は、各日付がJTextAreaで表されるカレンダーを作成しています。私は与えられた月のカレンダーのすべての日付のJTextAreasの配列を作成しました。MouseListenerで配列のインデックスを取得する方法は?

これは私がセルをクリックして、テキストを設定することができるようにしたいCalenderFrameクラス

import java.awt.Color; 
import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 
import javax.swing.border.Border; 



public class CalendarFrame extends JFrame{ 

private static final int FRAME_HEIGHT = 700; 
private static final int FRAME_WIDTH = 700; 

private static final int NUM_OF_CELLS = 35; 
private static final int DIM_OF_CELLS = 3; 

private JLabel month; 
private JPanel panel; 
private CellBox[] allCells; 
String text = ""; 




public CalendarFrame(){ 

    month = new JLabel("October"); 
    add(month, BorderLayout.CENTER); 

    class CellListener implements MouseListener{ 


     @Override 
     public void mouseClicked(MouseEvent arg0) { 
      // TODO Auto-generated method stub 
      text = JOptionPane.showInputDialog("Set text for date: "); 
      System.out.println(text); 
      allCells[].get.setText(text); 

     } 

     @Override 
     public void mouseEntered(MouseEvent arg0) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void mouseExited(MouseEvent arg0) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void mousePressed(MouseEvent arg0) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void mouseReleased(MouseEvent arg0) { 
      // TODO Auto-generated method stub 

     } 



    } 
    CellListener listener = new CellListener(); 

    createCellsPanel(); 
    for(int k= 0; k < NUM_OF_CELLS; k++){ 

     allCells[k].getCell().addMouseListener(listener); 

    } 
    setSize(FRAME_WIDTH, FRAME_HEIGHT); 

} 

public CellBox[] createAllCells(int numOfCells){ 

    CellBox[] cells = new CellBox[numOfCells]; 

    for(int i = 0; i < NUM_OF_CELLS; i++){ 
     cells[i].createCell(new JTextArea(DIM_OF_CELLS, DIM_OF_CELLS)); 
     Border border = BorderFactory.createLineBorder(Color.BLACK); 
     cells[i].getCell().setBorder(BorderFactory.createCompoundBorder(border, BorderFactory.createEmptyBorder(10, 10, 10, 10))); 
     cells[i].getCell().setEditable(false); 

     cells[i].setCellNum(i); 

    } 
    return cells; 


} 

public void createCellsPanel(){ 

    allCells = createAllCells(NUM_OF_CELLS); 
    panel = new JPanel(); 
    panel.setLayout(new GridLayout(5,7)); 
    for(int i = 0; i < NUM_OF_CELLS; i++){ 
     panel.add(allCells[i]); 
    } 

    add(panel, BorderLayout.SOUTH); 


} 

public void popOutEvent(){ 

} 

} 

メインクラス

import javax.swing.JFrame; 

public class CalendarFrameViewer { 

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

とCellBoxクラス

import javax.swing.JTextArea; 

public class CellBox { 

private int cellNum; 
private int date; 
private JTextArea cell; 

public void setCellNum(int num){ 
    cellNum = num; 
} 

public void setDate(int date){ 
    this.date = date; 
} 

public void createCell(JTextArea cell){ 
    this.cell = cell; 
} 

public int getCellNum(){ 
    return cellNum; 
} 

public int getDate(){ 
    return date; 
} 

public JTextArea getCell(){ 
    return cell; 
} 
} 

ですセル内にある。どのようにして細胞番号またはインデックス番号を取得できますか?

+2

これの[MCVE]を書くことができますか?あなただけのコードスニペットを持っているし、他の多くのコンテキストなしでマウスリスナーについての言葉の束。誰もあなたのコードを実際に試してみたり、あなたが尋ねたり話していることを簡単に見ることはできません。 – pvg

答えて

0

クリックしたコンポーネントのセル番号を取得するにはどうすればよいですか?その場合、最も簡単な解決策は、各テキスト領域に固有のマウスリスナーを用意することです。

たとえば、次のような方法かもしれない:私はあなたが問題を根底ていると思うしかし

private JTextArea makeCell(final int id) { 
    JTextArea cell = new JTextArea(DIM_OF_CELLS, DIM_OF_CELLS)); 
    cell.setBorder(...); 
    cell.setEditable(false); 
    cell.addMouseListener(new MouseAdaptor() { 
     public void mouseClicked(MouseEvent ev) { 
      String text = JOptionPane.showInputDialog("Set text for date: "); 
      allCells[id].get.setText(text);  
     } 
    }); 
    return cell; 
} 

あなたは半分だけがCellBoxクラスをカプセル化していることです。 JTextAreaにアクセスするには、getCellメソッドを使用するのではなく、そのクラス内のコンポーネントの作成とマウスリスナーの提供をお勧めします。次に、インデックスを持つセルにはまったくアクセスする必要はありません。実際には、インデックスを保存する必要があるかどうかは疑問です。

public class CellBox { 
    private final JTextArea cell; 

    public CellBox() { 
     cell = new JTextArea(DIM_OF_CELLS, DIM_OF_CELLS)); 
     cell.setBorder(...); 
     cell.setEditable(false); 
     cell.addMouseListener(new MouseAdaptor() { 
      public void mouseClicked(MouseEvent ev) { 
       String text = JOptionPane.showInputDialog("Set text for date: "); 
       cell.setText(text);  
      } 
     }); 
    } 
} 
関連する問題