我花了5个小时寻找我的问题的解决方案,但我真的不能。 我只学了8天的java swing来做这个任务。 (我的教授没有教授完成作业所需要的东西,只谈了不到30分钟的挥杆动作) 我也尝试阅读Swing文档,但我不知道如何阅读文档。因为进入阅读问题我想问2个无关紧要的问题。
上面提出的问题是因为,在这种情况下,我发现自己处于困惑的循环中,我只是不知道从哪里开始/学习以及如何。
无论如何,让我们说清楚。
使这个问题如此混乱的原因是需要满足的所有条件和要求。
目标:在其上有3个带有颜色名称的按钮,单击时更改圆圈图标的颜色。
要求(让我感到困惑)
按钮标签必须是颜色的名称,在这种情况下为红色/绿色/蓝色
显示一个简单的图标,其中的圆圈最初为红色
圆圈颜色必须更改为 按钮的标签。
单击按钮时,您需要更改图标的颜色,然后
调用标签的func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "sessionCell", for: indexPath) as? SessionCollectionViewCell
cell.YOUR_BUTTON.tag = indexPath.item
return cell!
}
方法。这反过来会调用图标repaint()
[paintIcon()
为我们调用paintIcon]
按钮'动作侦听器对象必须是匿名类。
按钮必须在Jlabel
()中创建并设置为循环。
main
您要编写的for (i=0; i<3; i++) {
btn[i] = createButton(i, ......);
}
)函数会获得一个索引(0到2)并创建绿色,蓝色和红色按钮,具体取决于i的值。返回createButton(
个对象并附加适当的侦听器。
提示:使用可由i:
索引的Color数组JButton
然后,使用所需颜色创建颜色:
以下是我目前的代码:
我遇到的问题是:
如何标记包含字符串的创建颜色对象。 (教授要求,但他的代码甚至不起作用)
如何在ActionPerform中使用repaint()发送&#34; signal&#34; to paintIcon,这样当我点击一个按钮。圆形改变颜色。
Color[] colors = new String[]{"RED", "GREEN", "BLUE"};
答案 0 :(得分:0)
所以我偶然发现了这个question and answer并将其转换为适合您的例子。可能是同一个班级,不同的一年。这就是我得到的:
public class ColorChanger implements Icon {
private Color color;
public ColorChanger() {
color = Color.red;
}
@Override
public int getIconWidth() {
return 10;
}
@Override
public int getIconHeight() {
return 10;
}
public void setColor(Color color) {
this.color=color;
}
@Override
public void paintIcon(Component c, Graphics g, int x, int y) {
Graphics2D g2 = (Graphics2D) g;
Ellipse2D.Double circle = new Ellipse2D.Double(0, 0, 10, 10);
g2.setColor(color);
g2.fill(circle);
}
public static void main(String[] args) {
JFrame myFrame = new JFrame();
ColorChanger myCircle = new ColorChanger();
final JLabel myLabel = new JLabel(myCircle);
final int FIELD_WIDTH = 20;
JTextField textField = new JTextField(FIELD_WIDTH);
textField.setText("Click a button!");
final String[] colors = new String[]{"RED", "GREEN", "BLUE"};
ActionListener listener = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
for (int i = 0; i < colors.length; i++) {
if(e.getActionCommand().equals(colors[i])) {
switch (colors[i]) {
case "RED":
myCircle.setColor(Color.RED);
break;
case "GREEN":
myCircle.setColor(Color.GREEN);
break;
case "BLUE":
myCircle.setColor(Color.BLUE);
break;
default:
myCircle.setColor(Color.BLACK);
break;
}
textField.setText(colors[i]);
break;
}
}
myLabel.repaint();
}
};
JButton btn[];
btn = new JButton[3];
for (int i=0; i<3; i++) {
btn[i] = new JButton(colors[i]);
btn[i].addActionListener(listener);
}
myFrame.setLayout(new FlowLayout());
myFrame.add(myLabel);
for (int i=0; i<3; i++) {
myFrame.add(btn[i]);
}
myFrame.add(textField);
myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
myFrame.pack();
myFrame.setVisible(true);
}
}
您的Circle
类必须实现Icon
接口才能表现为Icon
并实施paintIcon
方法。这很可能是你出错的地方。
我还添加了一个侦听器并使用ActionCommand
来确定选择了哪种颜色。它只是使写作更简洁。如果你不理解,请问。
在开头回答你的两个无关紧要的问题。
文档中应提供所有方法。它可能在不同的类或接口中进行扩展和实现,但它必须在那里。
我不会从阅读文档开始。我将从介绍性教程中学习语法开始,然后从中查找有关您要执行的操作的示例。在我看来,文档是官方参考和解释,而不是学习。换句话说,如果您想知道方法的详细信息,请阅读文档。如果你想知道如何使用它 - 找一个例子。