Java井字棋,如何在JTextArea組件中畫叉或者圓,如何設定滑鼠監聽事件來獲取當前用戶點擊的是哪個JtextArea
package swing;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.border.Border;
import javax.swing.border.LineBorder;
public class MyFrame extends JFrame {
//創建各類控制元件物件
JLabel labelOne = new JLabel("<html>請選擇對戰模式 </html>");
JLabel labelTwo = new JLabel(" ");
JButton buttonOne = new JButton("人人對戰");
JButton buttonTwo = new JButton("人機對戰");
JButton buttonThree = new JButton("退出游戲!");
JTextArea area1 = new JTextArea(12,12);
JTextArea area2 = new JTextArea(12,12);
JTextArea area3 = new JTextArea(12,12);
JTextArea area4 = new JTextArea(12,12);
JTextArea area5 = new JTextArea(12,12);
JTextArea area6 = new JTextArea(12,12);
JTextArea area7 = new JTextArea(12,12);
JTextArea area8 = new JTextArea(12,12);
JTextArea area9 = new JTextArea(12,12);
Border border = BorderFactory.createLineBorder(Color.BLACK);
public MyFrame(String title) {
//設定視窗標題
super(title);
//創建了內容面板物件(ContentPane)
Container contentPane = this.getContentPane();
contentPane.setLayout(new BorderLayout());
//創建了JPanel容器物件
//panalOne是用來顯示最上方的布局的
JPanel panalOne = new JPanel();
//panalTwo是用來顯示棋盤的布局
JPanel panalTwo = new JPanel();
//取消默認布局管理器
//contentPane.setLayout(null);
// //設定內容面板為為:流布局 FlowLayout
// LayoutManager layout = new FlowLayout(FlowLayout.CENTER);
// contentPane.setLayout(layout);
//設定panalTwo中,有3*3的棋盤,并實作邊框為0
panalTwo.setLayout(new GridLayout(3, 3, 0, 0));
panalTwo.setBorder(new LineBorder(Color.black));
//向內容面板里添加JPanal的容器控制元件
contentPane.add(panalOne,BorderLayout.NORTH);
contentPane.add(panalTwo,BorderLayout.CENTER);
//設定文本域的邊框
area1.setBorder(border);
area1.setEditable(false);
area2.setBorder(border);
area2.setEditable(false);
area3.setBorder(border);
area3.setEditable(false);
area4.setBorder(border);
area4.setEditable(false);
area5.setBorder(border);
area5.setEditable(false);
area6.setBorder(border);
area6.setEditable(false);
area7.setBorder(border);
area7.setEditable(false);
area8.setBorder(border);
area8.setEditable(false);
area9.setBorder(border);
area9.setEditable(false);
//向容器控制元件中添加組件
panalOne.add(labelOne);
panalOne.add(labelTwo);
panalOne.add(buttonOne);
panalOne.add(buttonTwo);
panalOne.add(buttonThree);
panalTwo.add(area1);
panalTwo.add(area2);
panalTwo.add(area3);
panalTwo.add(area4);
panalTwo.add(area5);
panalTwo.add(area6);
panalTwo.add(area7);
panalTwo.add(area8);
panalTwo.add(area9);
//以下四個部分為設定組件的格式
labelOne.setFont(new Font("宋體", Font.PLAIN, 25));
labelOne.setForeground(new Color(47,174,250));
labelOne.setBounds(new Rectangle(50,50,200,50));
buttonOne.setFont(new Font("宋體", Font.PLAIN, 16));
buttonOne.setForeground(new Color(47,174,250));
buttonOne.setBounds(new Rectangle(280,50,150,50));
buttonTwo.setFont(new Font("宋體", Font.PLAIN, 16));
buttonTwo.setForeground(new Color(47,174,250));
buttonTwo.setBounds(new Rectangle(430,50,150,50));
buttonThree.setFont(new Font("宋體", Font.PLAIN, 16));
buttonThree.setForeground(new Color(47,174,250));
buttonThree.setBounds(new Rectangle(580,50,150,50));
//創建監聽器物件,將監聽器物件加入到按鈕1中去。
buttonOne.addActionListener( new ActionListener() {
public void actionPerformed(ActionEvent e) {
//點擊按鈕1后,按鈕1和2均變為不可選狀態,并重繪JLable物件labelOne的內容
changeFrameOne();
MyFrame.doublePerson.play();
}
});
//創建監聽器物件,將監聽器物件加入到按鈕2中去。
buttonTwo.addActionListener( new ActionListener() {
public void actionPerformed(ActionEvent e) {
//點擊按鈕2后,按鈕1和2均變為不可選狀態,并重繪JLable物件labelTwo的內容
changeFrameTwo();
}
});
//創建監聽器物件,將監聽器物件加入到按鈕3中去。
buttonThree.addActionListener( new ActionListener() {
public void actionPerformed(ActionEvent e) {
//關閉視窗,顯示一段話并直接關閉視窗
JOptionPane.showMessageDialog(buttonThree,"游戲已退出,歡迎下次進入!" ) ;
System.exit(0);
}
});
}
public void changeFrameOne() {
buttonOne.setEnabled(false);
buttonTwo.setEnabled(false);
labelOne.setText("人人對戰模式");
}
public void changeFrameTwo() {
buttonOne.setEnabled(false);
buttonTwo.setEnabled(false);
labelOne.setText("人機對戰模式");
}
//點擊按鈕One后,內部類的complete方法被呼叫了
private static class doublePerson {
public static void play () {
isFinish();
}
public static void isFinish(){
}
}
}
uj5u.com熱心網友回復:
直接用jpanel不就好了,干么在jtextarea, 容器都可以setName,然后用滑鼠監聽器,并用getName回傳被點擊的容器名字。也可以用Jtable,回傳被選中的行和列
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/166977.html
標籤:Java相關
