相关疑难解决方法(0)

重写到MVC后GUI无法正常工作

我正在练习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)

java model-view-controller user-interface swing

121
推荐指数
2
解决办法
4万
查看次数

使用Graphics2D覆盖BufferedImage上的文本并返回BufferedImage

我已经检查了类似命名的问题,但他们没有回答这个用例.

基本上,我是在一个给定的坐标(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.覆盖'渲染'

在当前代码中,图像显示为未更改.

谢谢!

java bufferedimage graphics2d

41
推荐指数
1
解决办法
7万
查看次数

将Graphics2D转换为Image或BufferedImage

我这里有点问题.

我有一个applet,用户可以在其中"绘制".为此,我使用java.awt.Graphics2D.但是,如何将用户绘制图像保存为JPEG图像,或者至少将其转换为BufferedImage或其他什么?我不知道该怎么做.

谢谢.

java applet bufferedimage graphics2d

16
推荐指数
3
解决办法
5万
查看次数

Java:JTabbedPane选项卡标题中的JProgressBar(或等效项)

如果我真的想做类似的事情,我可以在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(有些人会这样做,有些人不会这样做:而且很多人都不会这样做,这不是我的呼叫)

java swing jtabbedpane jprogressbar

10
推荐指数
2
解决办法
2746
查看次数

最好处理2个覆盖实时更新的面板?

在非常基本的术语中,我有一个面板逐个像素地绘制一条线,并且正在实时更新.除此之外,我想要另一个面板,它围绕当前像素绘制一个框,但稍后会自行清除.两者都是实时的

我目前的情况是包装JPanel有一个OverlayLayout.底部面板具有Graphics2D从其中获取的对象绘制的线JPanel.顶部面板后面的框也是使用从其获取的Graphics2D对象绘制的JPanel.

这个系统中的问题很多.因为我只是Graphics2D单独绘制对象而不是覆盖JPanel paint(),所以当面板需要重新绘制时,不仅所有线都丢失了,我想我只是通过单个线程更新屏幕来反对Swing的线程模型.我还没有让顶部面板正常工作,它只是不断清理屏幕,不会让底部面板划一条线.

处理这种情况的最佳方法是什么?我对图像处理和Swing中图像的低级显示几乎没有经验,我只知道基础知识.我听说过BufferedImage,但不知道该放置该图像的位置,如果稍后更改它将会更新,这样做的效率,以及它缓冲的事实会吓跑我.我不知道该用什么

有人能指出我正确的方向,我需要用什么来实现这一目标?

java swing

6
推荐指数
1
解决办法
366
查看次数

使用Graphics的JPanel自定义绘图

我有一个自定义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并做了一些自定义图形绘制.为什么这有时只会起作用?

java graphics swing jpanel jframe

5
推荐指数
1
解决办法
7536
查看次数

更改JPanel Graphics g颜色绘制线

我有一个类似于油漆的程序.并且我正在尝试实现更改笔颜色,但是当我更改颜色时,当前绘制的所有内容都更改为颜色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 swing drawing mouselistener

4
推荐指数
1
解决办法
2万
查看次数