Вот пример того, как вы должны делать графику. Это гораздо больше, чем это. Я также предоставляю:
- A
JList
цветов, чтобы вы могли видеть один из способов сделать это. - Панель ввода с
JLabel
и JFormattedTextField
для принятия ввода вместо JOptionPane
, так как он легче позиционируется и позволяет управлять форматом.
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import javax.swing.JFormattedTextField;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.border.LineBorder;
import javax.swing.text.MaskFormatter;
public class Ch12_PrExercise1 extends JPanel {
int number;
JFormattedTextField textField = null;
JFrame frame = new JFrame("Ch12 PrExercise1");
// add more if you want.
MyColor[] colors = { new MyColor(Color.red, "Red"),
new MyColor(Color.blue, "Blue"),
new MyColor(Color.green, "Green"),
new MyColor(Color.orange, "Orange"),
new MyColor(Color.magenta, "Magenta"),
new MyColor(new Color(155, 0, 155), "Purple"),
new MyColor(Color.yellow, "Yellow"),
new MyColor(new Color(128, 128, 128), "Gray") };
Color color = Color.red;
class MyColor {
Color color;
String name;
public MyColor(Color color, String name) {
this.color = color;
this.name = name;
}
public String toString() {
return name;
}
}
public Ch12_PrExercise1() {
setPreferredSize(new Dimension(250, 300));
frame.add(this);
// create JList here
JList<MyColor> colorList = new JList<>(colors);
colorList.setBorder(new LineBorder(Color.black, 1));
try {
textField =
new JFormattedTextField(new MaskFormatter("#"));
} catch (Exception e) {
}
textField.setColumns(3);
setLayout(new BorderLayout());
add(colorList, BorderLayout.EAST);
JPanel inputPanel = new JPanel();
inputPanel.add(new JLabel("Please enter a digit: "));
inputPanel.add(textField);
add(inputPanel, BorderLayout.SOUTH);
textField.addActionListener((ae) -> {
String text = textField.getText();
number = Integer.parseInt(text);
textField.setText("");
repaint();
});
// gets the selected color in the JList, sets color to that
// color and issues a repaint.
colorList.addListSelectionListener((lde) -> {
color = ((JList<MyColor>) lde.getSource())
.getSelectedValue().color;
repaint();
});
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities
.invokeLater(() -> new Ch12_PrExercise1().start());
}
public void start() {
String input;
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
// from the list of colors.
g.setColor(color);
switch (number) {
case 0:
g.fillRect(50, 25, 125, 25);
g.fillRect(50, 50, 25, 175);
g.fillRect(50, 200, 125, 25);
g.fillRect(150, 25, 25, 175);
break;
case 1:
g.fillRect(75, 25, 75, 25);
g.fillRect(100, 50, 50, 125);
g.fillRect(50, 175, 150, 25);
break;
case 2:
g.fillRect(50, 25, 125, 25);
g.fillRect(150, 50, 25, 50);
g.fillRect(50, 100, 125, 25);
g.fillRect(50, 175, 125, 25);
g.fillRect(50, 125, 25, 50);
break;
case 3:
g.fillRect(150, 50, 25, 175);
g.fillRect(50, 50, 100, 25);
g.fillRect(50, 125, 100, 25);
g.fillRect(50, 200, 100, 25);
break;
case 4:
g.fillRect(50, 25, 25, 75);
g.fillRect(50, 100, 100, 25);
g.fillRect(150, 25, 25, 175);
break;
case 5:
g.fillRect(50, 25, 125, 25);
g.fillRect(50, 50, 25, 50);
g.fillRect(50, 100, 125, 25);
g.fillRect(50, 175, 125, 25);
g.fillRect(150, 125, 25, 50);
break;
case 6:
g.fillRect(50, 25, 125, 25);
g.fillRect(50, 50, 25, 50);
g.fillRect(50, 100, 125, 25);
g.fillRect(50, 175, 125, 25);
g.fillRect(150, 125, 25, 50);
g.fillRect(50, 125, 25, 50);
break;
case 7:
g.fillRect(50, 25, 125, 25);
g.fillRect(150, 50, 25, 150);
break;
case 8:
g.fillRect(50, 25, 125, 25);
g.fillRect(50, 50, 25, 50);
g.fillRect(50, 100, 125, 25);
g.fillRect(50, 175, 125, 25);
g.fillRect(150, 125, 25, 50);
g.fillRect(50, 125, 25, 50);
g.fillRect(150, 50, 25, 50);
break;
case 9:
default:
g.fillRect(50, 25, 125, 25);
g.fillRect(50, 50, 25, 50);
g.fillRect(50, 100, 125, 25);
g.fillRect(50, 175, 125, 25);
g.fillRect(150, 125, 25, 50);
g.fillRect(150, 50, 25, 50);
break;
}
}
}