相关疑难解决方法(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万
查看次数

不移动鼠标光标时Java动画会断断续续

我有一个非常简单的动画,一个大字体的文本连续(逐个像素)向左移动.首先将文本转换为图像,然后启动计时器任务,重复(每10-20毫秒)将图像的x坐标递减1,然后执行重绘().

该程序在某些系统上显示出奇怪的行为.在我的电脑上使用nVidia卡,它运行顺畅.在我的Vaio笔记本电脑上,在BeagleBoneBlack和朋友的Mac上,它会严重破坏.它似乎暂停一段时间,然后跳到左边大约10个像素,再次暂停,依此类推.

我是什么树桩在这些系统上动画的事实,只有当你不触摸鼠标口吃.只要您在窗口内移动鼠标光标,无论速度有多慢,或者拖动窗口本身,动画都会非常流畅!

任何人都能解释一下吗?这是程序:

import java.awt.*;
import java.awt.image.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
import java.util.*;

class Textimg extends JComponent
{
    String      str;
    Font        font;
    int         x = 0;
    final int   ytext = 136;
    Image       img;

    public Textimg(String s)
    {
        str = s;
        font = new Font("Noserif", Font.PLAIN, 96);
        setLayout(null);
    }

    protected void paintComponent(Graphics g)
    {
        if (img == null)
        {
            img = createImage(4800, 272);
            Graphics gr = img.getGraphics();

            gr.setFont(font);
            gr.setColor(Color.BLACK);
            gr.fillRect(0, 0, 4800, 272);
            gr.setColor(new Color(135, 175, …
Run Code Online (Sandbox Code Playgroud)

java animation swing

16
推荐指数
2
解决办法
2333
查看次数

当我重新粉刷时,停止在秋千上闪烁

我正在制作一个带有tilemap的RPG.为了生成tilemap,我循环通过一个二维数组,但这意味着当我重新绘制时,我必须每次都这样做.如果我重画太多屏幕闪烁,我怎么能阻止这个.

package sexyCyborgFromAnOtherDimension;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Timer;
import java.util.TimerTask;

import javax.swing.JPanel;

@SuppressWarnings("serial")
public class Game extends JPanel
{
    KeyLis listener;
    int mapX = 20;
    int mapY = 20;
    boolean up = false;
    boolean down = false;
    boolean right = false;
    boolean left = false;
    String[][] map;

    public Game()
    {
        super();
        try 
        {
            map = load("/maps/map1.txt");
        } 

        catch (IOException e) 
        {
            // TODO Auto-generated catch …
Run Code Online (Sandbox Code Playgroud)

java concurrency swing repaint event-dispatch-thread

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

在一个JPanel上画的10个线程

我在学习Java中的线程时遇到了一些问题.目标是进行模拟,向我们展示兔子在某种类型的板上如何从狼群中奔跑.每只狼和每只兔子都应该成为一个线索.所以我在Test类的main方法中创建了一个GUI,并创建了一个实现Runnable接口的新类.我认为这很容易也很合乎逻辑.但是现在,我如何AddRabbit从这些线程调用该方法?因为非常线程应该像下面这样做:

  1. 更改其属性,如地图上的位置
  2. 检查地图上的其他线程
  3. 在面板上涂漆

但是怎么样?

java swing multithreading rendering jpanel

3
推荐指数
1
解决办法
143
查看次数

java图形重绘方法实际上是如何工作的

我刚刚开始使用java 2d图形应用程序,在我的研究重绘是重绘我们的图形浪费了大量资源.但是我想知道什么重绘是什么,有效以及如何有效地使用它,为我画布上的许多可移动动态对象安全快速地线程?

java swing java-2d repaint graphics2d

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

Java动画

我开始对使用Java制作动画(幻灯片,背景等)感兴趣.我知道JavaFX做得好多了,但我只是顽固地打扰转换.

这是我到目前为止所得到的.

import java.awt.Color;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.awt.image.BufferedImageOp;
import java.awt.image.ConvolveOp;
import java.awt.image.Kernel;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Random;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class BlurredLightCells extends JPanel {

    private static final long serialVersionUID = 4610174943257637060L;

    private Random random = new Random();

    private ArrayList<LightCell> lightcells;

    private float[] blurData = new float[500];

    public static void main(String[] args) {
        JFrame frame = new JFrame("Swing animated bubbles");
        frame.setSize(1000, 750);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        frame.add(new BlurredLightCells(60));

        frame.setVisible(true);
    }

    public BlurredLightCells(int amtOfBCells) { …
Run Code Online (Sandbox Code Playgroud)

java animation swing

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

使用 Java Swing 高效重绘线条

我试图找到创建动态 Java 图形应用程序的最有效方法。我想构建一个包含许多不同部分的大屏幕,所有这些部分都使用不同的线程重新绘制或更新,以使屏幕看起来“生动”。然而,我最初的尝试很糟糕,屏幕变得很慢,有问题等等 - 所以我想我需要创建不同的模块(JPanels),每个模块都包含其他图形部分(线、圆等),并且每个不同的 JPanel 被单独重绘(需要时),而不是整个主面板(或框架)。

所以我写了一个小演示程序 - 我的程序包含一个窗口,有多个面板,包裹在我的名为“MyPanel”的对象中 - 每个这样的 MyPanel 包含几条绘制的线(我有一个 Line 对象),所有线从顶部开始-左角并具有不同的长度和角度)。每个不同的 MyPanel 都有不同的线条颜色(参见此图像)。

初始画面

我实例化了几个工作线程,每个线程指定一个 MyPanel - 工作人员等待 5 秒,然后尝试以下列方式重新绘制所有线条:

  • 从 JPanel (MyPanel) 中删除所有现有行。
  • 创建具有不同角度和长度的新线。
  • 通过调用 super.repaint() 重绘 JPanel (MyPanel)这是整个目的,只更新这个面板,让它重绘它的所有子部分,而不是整个程序

然而,发生了一些奇怪的事情:当重新绘制面板时,每个面板都以可能包含所有其他 MyPanel 的方式重新绘制,或者以某种方式镜像主屏幕 - 不清楚这里到底发生了什么。此外,面板的所有“背景不透明度”都消失了(参见此图像)。

屏幕后

在我附上我的代码之前,让我说它使用了一个空的 LayoutManager。我知道这在效率、模块化等方面是一个很大的“不”。但是我别无选择,因为我需要快速创建一个非常复杂和精确的图形演示,它仅用作概念验证,因此目前所有这些缺陷都可以忽略不计。我知道这在设计上很糟糕,它也伤害了我,但这是我能按时完成的唯一方法。

这是代码 - 会发生什么?和我怎么能有效地如果不使用这种方式重新绘制程序的不同部分?注意我不能“用背景颜色重新绘制现有的线条”,因为我的主程序中有一个背景图像。

任何帮助,将不胜感激!

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import javax.swing.JFrame;
import javax.swing.JPanel;

/**
 * Displays the main windows (this is …
Run Code Online (Sandbox Code Playgroud)

java swing jpanel

0
推荐指数
1
解决办法
594
查看次数