我正在练习MVC风格的编程.我在一个文件中有一个Mastermind游戏,工作正常(可能除了"Check"按钮在开始时不可见).
http://paste.pocoo.org/show/226726/
但是当我把它重写为模型,视图,控制器文件时 - 当我点击空Pin(应该更新,并重新绘制新颜色)时 - 注意到了.谁能在这里看到任何问题?我尝试在不同的地方放置repaint(),但它根本不起作用:/
主要:
public class Main {
public static void main(String[] args){
Model model = new Model();
View view = new View("Mastermind", 400, 590, model);
Controller controller = new Controller(model, view);
view.setVisible(true);
}
}
Run Code Online (Sandbox Code Playgroud)
型号:
import java.util.Random;
public class Model{
static final int
LINE = 5,
SCORE = 10, OPTIONS = 20;
Pin pins[][] = new Pin[21][LINE];
int combination[] = new int[LINE];
int curPin = 0;
int turn = 1;
Random generator = new Random(); …Run Code Online (Sandbox Code Playgroud) 我已经检查了类似命名的问题,但他们没有回答这个用例.
基本上,我是在一个给定的坐标(x,y)上叠加一些文本(文本)我在包中有以下功能;
protected BufferedImage Process2(BufferedImage image){
Graphics2D gO = image.createGraphics();
gO.setColor(Color.red);
gO.setFont(new Font( "SansSerif", Font.BOLD, 12 ));
gO.drawString(this.text, this.x, this.y);
System.err.println(this.text+this.x+this.y);
return image;
}
Run Code Online (Sandbox Code Playgroud)
我觉得我错过了一些显而易见的东西; 我可以找到的每一个对Graphics2D的引用都是处理游戏或直接写入文件,但我只想要返回一个BufferedImage.覆盖'渲染'
在当前代码中,图像显示为未更改.
谢谢!
我这里有点问题.
我有一个applet,用户可以在其中"绘制".为此,我使用java.awt.Graphics2D.但是,如何将用户绘制图像保存为JPEG图像,或者至少将其转换为BufferedImage或其他什么?我不知道该怎么做.
谢谢.
如果我真的想做类似的事情,我可以在JTabbedPane选项卡中放置一个JProgressBar(或它的等价物)吗?(我的意思是,不在标签本身,
我该怎么办呢?
编辑 我真的想把进度条放在标签的标题中,而不是标签本身.
这是一些ascii艺术:
----------------------------------------------------
| Tab 1 || Tab 2||Tab-with-progress-bar||Tab 4|
----------- --------------------------------
' '
' '
' '
' '
' '
' '
' '
' '
----------------------------------------------------
Run Code Online (Sandbox Code Playgroud)
因此,它实际上是"选项卡2",目前可见,但我希望在第三个选项卡的标题中显示进度条(或等效项).
编辑2
这必须适用于Java 1.5:这必须适用于无数MacOS 10.4和MacOS 10.5 Apple计算机,这些计算机永远不会配备Java 6(有些人会这样做,有些人不会这样做:而且很多人都不会这样做,这不是我的呼叫)
在非常基本的术语中,我有一个面板逐个像素地绘制一条线,并且正在实时更新.除此之外,我想要另一个面板,它围绕当前像素绘制一个框,但稍后会自行清除.两者都是实时的
我目前的情况是包装JPanel有一个OverlayLayout.底部面板具有Graphics2D从其中获取的对象绘制的线JPanel.顶部面板后面的框也是使用从其获取的Graphics2D对象绘制的JPanel.
这个系统中的问题很多.因为我只是Graphics2D单独绘制对象而不是覆盖JPanel paint(),所以当面板需要重新绘制时,不仅所有线都丢失了,我想我只是通过单个线程更新屏幕来反对Swing的线程模型.我还没有让顶部面板正常工作,它只是不断清理屏幕,不会让底部面板划一条线.
处理这种情况的最佳方法是什么?我对图像处理和Swing中图像的低级显示几乎没有经验,我只知道基础知识.我听说过BufferedImage,但不知道该放置该图像的位置,如果稍后更改它将会更新,这样做的效率,以及它缓冲的事实会吓跑我.我不知道该用什么
有人能指出我正确的方向,我需要用什么来实现这一目标?
我有一个自定义JPanel,有时在我的程序中,我需要调用一个方法,将屏幕画成黑色,就是这样.
public void clearScreen() {
Graphics g = getGraphics();
g.setColor(Color.black);
g.fillRect(0,0,getWidth(),getHeight());
}
Run Code Online (Sandbox Code Playgroud)
当我启动程序时,我称之为此方法.
但是,我发现它有时会起作用,有时则不然.这很奇怪.我还发现,当它不起作用时,图形对象不为null,宽度和高度也正确定义(来自getWidth()和getHeight()).
为什么这有时会起作用,有时候不起作用?
在程序的某个时刻在我的JPanel上制作自定义绘图的正确方法是什么?我正在使用getGraphics()是否正确?我的JPanel(在某些时候)有JComponents,但后来我删除了那些JComponents并做了一些自定义图形绘制.为什么这有时只会起作用?
我有一个类似于油漆的程序.并且我正在尝试实现更改笔颜色,但是当我更改颜色时,当前绘制的所有内容都更改为颜色RED,例如在我的程序中,如何使其不会重绘当前绘制到当前所有内容的所有内容改变颜色?下面的代码将编译并运行
JPanel绘图区域的类
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import javax.swing.BorderFactory;
import javax.swing.JPanel;
//refer to http://jkost.ergoway.gr/jnkjavaconnection/freedraw.html for the algorithm.
public class STDrawingArea extends JPanel {
/**
*
*/
private static final long serialVersionUID = 1L;
ArrayList<Rectangle> dPoint = new ArrayList<Rectangle>();
Point point = new Point(-1,-1);
private Color currentColor;
public STDrawingArea()
{
setBorder(BorderFactory.createLineBorder(Color.black));
setBackground(Color.WHITE);
addMouseMotionListener(new MouseAdapter() {
public void mouseDragged(MouseEvent e)
{
dPoint.add(new Rectangle(point.x,point.y,e.getX(),e.getY()));
point.x = e.getX();
point.y = e.getY();
repaint();
} …Run Code Online (Sandbox Code Playgroud) java ×7
swing ×5
graphics2d ×2
applet ×1
drawing ×1
graphics ×1
jframe ×1
jpanel ×1
jprogressbar ×1
jtabbedpane ×1