我将做一个简单的程序,有 4 个问题,每个问题有两个选择。
我想在 JFrame 的一侧添加四个圆圈,如果用户通过单击正确的选项回答正确,第一个圆圈将是绿色,然后如果他/她在第二个问题上回答错误,第二个圆圈将是黄色,依此类推.
如何在 JLabel 中添加这些圆圈???
嗯...我确实建议在问此类问题之前开始学习 Swing 和 Graphics2D :)
无论如何,作为一个开始提示,我可以建议一点......
要绘制JLabel或其他摆动组件,您可以使用paintComponent(Graphics g)
方法。请在开始之前仔细阅读文档和教程;
这是一个简短的示例,展示了如何利用 JPanel,因此您可以将其作为您第一步的基础
编辑 :
好的,所以你有类似的代码
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JPanel;
public class ShapePanel extends JPanel
{
public void paintComponent (Graphics g)
{
super.paintComponent(g);
g.setColor(Color.green);
g.drawOval(0,0, 20, 20);
g.setColor(Color.yelow);
g.fillOval(0, 0, 15, 15);
}
}
...并且您想从另一个对象中更改颜色。对于此任务,您可以创建某种可观察对象,如下所示
>未测试
/**
* @author user592704
*/
class ShapePanel extends JPanel
{
private Color[] colors;
private Vector<MyCircleColorActionListener> myCircleColorActionListeners=new Vector<MyCircleColorActionListener>();
public static final int OVAL_COLOR=0;
public static final int FILL_OVAL_COLOR=1;
@Override
public void paintComponent (Graphics g)
{
this.myPaint(g);
}
private void myPaint(Graphics g)
{
super.paintComponent(g);
g.setColor(this.getColor()[ShapePanel.OVAL_COLOR]);
g.drawOval(0,0, 20, 20);
g.setColor(this.getColor()[ShapePanel.FILL_OVAL_COLOR]);
g.fillOval(0, 0, 15, 15);
}
private Color[] getColor() {
return colors;
}
private void setColor(Color[] colors) {
this.colors = colors;
this.repaint();
this.invokeObserver();
}
private void invokeObserver()
{
for(MyCircleColorActionListener myCircleColorActionListener:this.myCircleColorActionListeners)
{
myCircleColorActionListener.onColorChanged();
}
}
public void addMyCircleColorActionListener(MyCircleColorActionListener myCircleColorActionListener){this.myCircleColorActionListeners.add(myCircleColorActionListener);}
private JPanel getPanel(){return this;}
}
public interface MyCircleColorActionListener
{
void onColorChanged();
}
/**
* Some another object
*/
class MyAnotherClass extends JPanel implements MyCircleColorActionListener
{
private ShapePanel shapePanel=new ShapePanel();
private JButton testButton=new JButton("set red");
MyAnotherClass()
{
this.setLayout(new FlowLayout());
testButton.addMouseListener(new MouseAdapter(){
@Override
public void mouseClicked(MouseEvent e) {
Color [] colors=new Color[2];
colors[ShapePanel.OVAL_COLOR]=Color.green;
colors[ShapePanel.FILL_OVAL_COLOR]=Color.red;
getShapePanel().setColor(colors);
}
});
this.add(testButton);
this.shapePanel.addMyCircleColorActionListener(this);
}
private ShapePanel getShapePanel(){return this.shapePanel;}
public void onColorChanged() {
System.out.println("Color was changed");
}
}
我还没有测试过它,虽然我想这个概念必须很清楚。
但在您尝试将其集成到您的代码之前,我建议您仔细阅读如何在 Swing 组件中使用动作侦听器以及如何使用像观察者这样的模式......
如果您有其他问题,请发表评论
报告是否有帮助