Mein Code richtet ein 6x6 Array von JButtons ein, wenn Sie eines dieser JButtons drücken, erscheint eine 6x1 JDialog Box mit 6 Farboptionen. Wenn einer davon gedrückt wird, ändert sich das Quadrat, das zum Öffnen des JDialogs geöffnet wird, ändert seine Farbe.java color grid issues
Ich möchte ein Stück Code schreiben, so dass Sie in jeder Zeile/Spalte nur ein Quadrat jeder Farbe haben können. Im Minut-Modus verhindert der boolesche Wert, dass Sie dieselbe Farbe auf dasselbe Quadrat setzen (wenn Sie zum Beispiel auf die Schaltfläche klicken, wird sie schwarz, wenn sie eine andere Farbe hat).
der Code ist unten. jede Hilfe wird sehr geschätzt. Dank
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import java.sql.*;
public class Grid5 extends JFrame implements ActionListener
{
private ColourChooser paintBox = null;
public static final int ROW = 6;
public static final int COLUMN = 6;
private static Grid5 grid;
public static final String defaultName = "Black";
public JButton[][] buttons; //makes an array called buttons
public static void main(String[] args)// sets up a 6x6 grid
{
int rows = 6;
int cols = 6;
int size = 600;
Grid5 grid = new Grid5(rows, cols);
grid.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
grid.setPreferredSize(new Dimension(size, size));
grid.pack();
grid.setLocationRelativeTo(null);
grid.setVisible(true);
}
// main
public Grid5(int rows, int cols) // makes the 6x6 main grid a grid of JButtons
{
int rowSize = 6;
int colSize = 6;
int gridSize = 600;
buttons = new JButton[rowSize][colSize];
Container pane = getContentPane();
pane.setLayout(new GridLayout(rows, cols));
for(int j =0; j < rows; j++){
for (int i = 0; i < cols; i++) {
buttons[j][i] = new JButton("");
buttons[j][i].setOpaque(true);
buttons[j][i].setBackground(Color.BLACK);
buttons[j][i].setActionCommand(j + " " + i);
buttons[j][i].setName("Black");
buttons[j][i].addActionListener(this);
pane.add(buttons[j][i]);
}
}
} //end of grid constructor
public void actionPerformed(ActionEvent e)
{
JButton button = (JButton) e.getSource();
if (paintBox != null && paintBox.isShowing())//stops more than one paintBox from opening
paintBox.dispose();
if(e.getSource() instanceof JButton){
((JButton)e.getSource()).setBackground(Color.BLACK);
}
int rows = 6;
int cols = 1;
int size = 300;
paintBox = new ColourChooser(grid, false, button);
paintBox.setPreferredSize(new Dimension(size/3, size));
paintBox.pack();
paintBox.setVisible(true);
}
}
class ColourChooser extends JDialog
{
private JButton fillRed = new JButton("Red");
private JButton fillYellow = new JButton("Yellow");
private JButton fillBlue = new JButton("Blue");
private JButton fillGreen = new JButton("Green");
private JButton fillPurple = new JButton("Purple");
private JButton fillBrown = new JButton("Brown");
private JButton[] paintButton = {fillRed,fillYellow,fillBlue,fillGreen,fillPurple,fillBrown};
private Color[] colours = {Color.RED, Color.YELLOW, Color.BLUE, Color.GREEN, new Color(102, 0, 102), new Color(102, 51, 0)};
private JButton buttonPress;
private int buttonsLeftRow ;
private int buttonsLeftColumn ;
private int row,column;
public ColourChooser(final Grid5 frame, boolean isModal, JButton button)
{
buttonPress = button;
JPanel panel = new JPanel();
panel.setLayout(new GridLayout(6, 1));
for (int i = 0; i < paintButton.length; i++) {
paintButton[i].setOpaque(true);
paintButton[i].addActionListener(buttonAction);
paintButton[i].setForeground(new Color(100,100,100));
paintButton[i].setBackground(colours[i]);
panel.add(paintButton[i]);
}
add(panel);
pack();
}
private ActionListener buttonAction = new ActionListener()
{
public void actionPerformed(ActionEvent a)
{
JButton fill = (JButton) a.getSource();
if(fill == fillRed){
String colour = "Red";
if(checkColoursRow(colour)){
buttonPress.setBackground(Color.RED);
buttonPress.setName("Red");
dispose();
}
}
if(fill == fillYellow){
String colour = "Yellow";
if(checkColoursRow(colour)){
buttonPress.setBackground(Color.YELLOW);
buttonPress.setName("Yellow");
dispose();
}
}
if(fill == fillBlue){
String colour = "Blue";
if(checkColoursRow(colour)){
buttonPress.setBackground(Color.BLUE);
buttonPress.setName("Blue");
dispose();
}
}
if(fill == fillGreen){
String colour = "Green";
if(checkColoursRow(colour)){
buttonPress.setBackground(Color.GREEN);
buttonPress.setName("Green");
dispose();
}
}
if(fill == fillPurple){
String colour = "Purple";
if(checkColoursRow(colour)){
buttonPress.setBackground(new Color(102, 0, 102));
buttonPress.setName("Purple");
dispose();
}
}
if(fill.equals(fillBrown)){
String colour = "Brown";
if(checkColoursRow(colour)){
buttonPress.setBackground(new Color(102, 51, 0));
buttonPress.setName("Brown");
dispose();
}
}
}
};
private boolean checkColoursRow(String colour){
String command = buttonPress.getActionCommand();
String[] array = command.split(" ");
int row = Integer.parseInt(array[0]);
int column = Integer.parseInt(array[1]);
for(int i = 0; i<Grid5.COLUMN; i++){
if (i != row)
{
if(buttonPress.getName().equals(colour))
return false;
}
}
for (int i = 0; i < Grid5.ROW; i++)
{
if (i != column)
{
if (buttonPress.getName().equals(colour))
return false;
}
}
return true;
}
}
Werfen Sie einen Blick auf diesem [Beispiel] (http://stackoverflow.com/ a/9860374/1057230). –
Dies scheint eine beliebte [Hausaufgabenfrage] zu sein (http://stackoverflow.com/search?tab=newest&q=%5bjava%5d%206x6). – trashgod