Java Swing-针对特定任务的最佳控件
我需要将JavaSwing窗口划分为许多字段,类似于桌子或棋盘。每个单元格的颜色应取决于该单元格所代表的对象(每个对象都有坐标,坐标在游戏过程中不断变化,因此每个单元格的颜色不是恒定的) 此外,如果用户单击空白字段(白色),则会创建一个新的随机对象,并将此对象指定给这些字段(并且字段颜色正在更改)Java Swing-针对特定任务的最佳控件,java,swing,Java,Swing,我需要将JavaSwing窗口划分为许多字段,类似于桌子或棋盘。每个单元格的颜色应取决于该单元格所代表的对象(每个对象都有坐标,坐标在游戏过程中不断变化,因此每个单元格的颜色不是恒定的) 此外,如果用户单击空白字段(白色),则会创建一个新的随机对象,并将此对象指定给这些字段(并且字段颜色正在更改) 哪种java swing控件最适合这些功能?如果我是你,我会创建两个面板类(白色和黑色),白色的一个带有鼠标指针,这样当单击其中一个面板时,你可以从数组中随机拉出JLabel。下面是一个可能有用的示例
哪种java swing控件最适合这些功能?如果我是你,我会创建两个
面板类(白色和黑色),白色的一个带有鼠标指针,这样当单击其中一个面板时,你可以从数组中随机拉出JLabel
。下面是一个可能有用的示例(大约120行):
导入java.awt.BorderLayout;
导入java.awt.Color;
导入java.awt.Component;
导入java.awt.Dimension;
导入java.awt.EventQueue;
导入java.awt.GridLayout;
导入java.awt.event.MouseAdapter;
导入java.awt.event.MouseEvent;
导入java.util.Random;
导入javax.swing.JButton;
导入javax.swing.JComponent;
导入javax.swing.JFrame;
导入javax.swing.JLabel;
导入javax.swing.JPanel;
导入javax.swing.UIManager;
公共类草稿纸扩展了JFrame{
私有静态最终长serialVersionUID=1L;
私有静态最终int GRIDSIZE=8;
private JPanel[][]whitePanel=新的whitePanel[GRIDSIZE][GRIDSIZE];
private JPanel[][]blackPanel=新blackPanel[GRIDSIZE][GRIDSIZE];
private Random rand=new Random();
JButton b1=新JButton(“Btn1”);
JButton b2=新JButton(“Btn2”);
JButton b3=新JButton(“Btn3”);
JLabel l1=新的JLabel(“Lbl1”);
JLabel l2=新的JLabel(“Lbl2”);
JLabel l3=新的JLabel(“Lbl3”);
JPanel面板=新的JPanel();
私有JComponent[]randObjects={{b1,b2,b3},{l1,l2,l3},{panel,panel,panel};
私有颜色[]randColors={Color.RED,Color.ORANGE,Color.YELLOW,Color.GREEN,Color.BLUE,Color.MAGENTA};
公共草稿{
initGUI();
setTitle(“示例”);
包装();
setLocationRelativeTo(空);
可设置大小(假);
setDefaultCloseOperation(关闭时退出);
setVisible(真);
}
私有void initGUI(){
JPanel centerPanel=新的JPanel();
setLayout(新的GridLayout(GRIDSIZE,GRIDSIZE));//生成8*8网格
添加(中心面板,BorderLayout.CENTER);
MouseAdapter ma=新的MouseAdapter(){
@凌驾
公共无效mouseClicked(MouseEvent e){
组件clickedComp=findComponentAt(e.getPoint());
JPanel目标=(JPanel)点击comp;
面板背景(randColors[rand.nextInt(randColors.length)];
if(白色面板的目标实例){
target.add(randObjects[rand.nextInt(randObjects.length)][rand.nextInt(randObjects[0].length)];
target.updateUI();
}
}
};
addMouseListener(硕士);
对于(int row=0;row)具有背景色和图标的JLabel二维数组。JTable
。。。。。。。?
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.GridLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.Random;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.UIManager;
public class ScratchPaper extends JFrame {
private static final long serialVersionUID = 1L;
private static final int GRIDSIZE = 8;
private JPanel[][] whitePanel = new WhitePanel[GRIDSIZE][GRIDSIZE];
private JPanel[][] blackPanel = new BlackPanel[GRIDSIZE][GRIDSIZE];
private Random rand = new Random();
JButton b1 = new JButton("Btn1");
JButton b2 = new JButton("Btn2");
JButton b3 = new JButton("Btn3");
JLabel l1 = new JLabel("Lbl1");
JLabel l2 = new JLabel("Lbl2");
JLabel l3 = new JLabel("Lbl3");
JPanel panel = new JPanel();
private JComponent[][] randObjects = {{b1, b2, b3}, {l1, l2, l3}, {panel, panel, panel}};
private Color[] randColors = {Color.RED, Color.ORANGE, Color.YELLOW, Color.GREEN, Color.BLUE, Color.MAGENTA};
public ScratchPaper() {
initGUI();
setTitle("EXAMPLE");
pack();
setLocationRelativeTo(null);
setResizable(false);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
}
private void initGUI() {
JPanel centerPanel = new JPanel();
centerPanel.setLayout(new GridLayout(GRIDSIZE, GRIDSIZE)); // makes 8*8 grid
add(centerPanel, BorderLayout.CENTER);
MouseAdapter ma = new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
Component clickedComp = findComponentAt(e.getPoint());
JPanel target = (JPanel) clickedComp;
panel.setBackground(randColors[rand.nextInt(randColors.length)]);
if (target instanceof WhitePanel){
target.add(randObjects[rand.nextInt(randObjects.length)][rand.nextInt(randObjects[0].length)]);
target.updateUI();
}
}
};
addMouseListener(ma);
for (int row=0; row<GRIDSIZE; row++) {
for (int col=0; col<GRIDSIZE; col++) {
whitePanel[row][col] = new WhitePanel(row, col);
blackPanel[row][col] = new BlackPanel(row, col);
if ((row%2 == 0 && col%2 == 0) || ((row+1)%2 == 0 && (col+1)%2 == 0)) {
centerPanel.add(whitePanel[row][col]);
}
else {
centerPanel.add(blackPanel[row][col]);
}
}
}
}
public static void main(String args[]) {
try {
String className = UIManager.getCrossPlatformLookAndFeelClassName();
UIManager.setLookAndFeel(className);
} catch (Exception ex) {
System.out.println(ex);
}
EventQueue.invokeLater(new Runnable(){
@Override
public void run(){
new ScratchPaper();
}
});
}
class WhitePanel extends JPanel {
private static final int SIZE = 50;
public WhitePanel(int row, int col) {
Dimension size = new Dimension(SIZE, SIZE);
setPreferredSize(size);
setBackground(Color.WHITE);
}
}
class BlackPanel extends JPanel {
private static final int SIZE = 50;
public BlackPanel(int row, int col) {
Dimension size = new Dimension(SIZE, SIZE);
setPreferredSize(size);
setBackground(Color.BLACK);
}
}
}