我有个问题.我需要在图像中填充(或重新绘制)一些像素,存储在Image控件中.这是一个png图像.我的意思是,所有黑色像素都应该填充例如红色.我怎样才能做到这一点?我以为我可以直接访问像素并使用XOR更改特殊位,但我不知道如何做到这一点.或者也许有一种更简单的方法?
当更新请求被传递到swing(系统触发,例如由于调整大小或由另一个窗口阻止,或者由app调用例如通过调用repaint()方法),该请求如何实际处理?在RepaintManager中发生了什么过程?
我正在制作一个带有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) 我需要强制重绘的的的RatingBar控制.
在评级栏和样式出现许多问题后,我设法让几乎所有工作都能正常工作.
我在listview项目中使用它.由于它是如何工作的,人们必须与它的外观和行为"战斗"一点.我最终使用了我在SO上找到的解决方案,其中一个设置它作为指示器,但是在自己手动计算评分栏上的点击对应的分数时.在浏览代码时代码总是产生正确的结果,但第一次控制绘画本身是错误的.这是我在getView "第一部分"中的代码:
final RatingBar rating = (RatingBar)view.findViewById(R.id.listitem_catalog_rating);
rating.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_UP) {
float touchPositionX = event.getX();
float width = rating.getWidth();
float starsf = (touchPositionX / width);
starsf = starsf * param_final__data.score_max; // 5
int starsint = (int) starsf + param_final__data.score_min;
byte starsbyte = (byte) starsint;
param_final__data.score_cur = starsbyte;
starsf = starsint;
rating.setRating(starsf);
rating.setVisibility(View.INVISIBLE);
// force repaint and set …
Run Code Online (Sandbox Code Playgroud) repaint()
我的Java代码中的方法有问题.我想在另一个中调用它,class
但我不能,有些东西根本不起作用.我在论坛上搜索过,但没有任何东西可以帮助我.
我的主要 class
:
public class Main {
public static Main main;
public static JFrame f;
public Main(){
}
public static void main(String[] args) {
main = new Main();
f = new JFrame();
Ball b = new Ball();
f.getContentPane().setBackground(Color.GRAY);
f.add(b);
f.setSize(500, 500);
f.setLocationRelativeTo(null);
f.setTitle("Test");
f.setVisible(true);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.addMouseMotionListener(b);
f.addKeyListener(new Key());
}
}
Run Code Online (Sandbox Code Playgroud)
class
在我创建用于移动形状的2DGraphics的球:
public class Ball extends JLabel implements MouseMotionListener{
public Ball(){
}
public static double x = 10;
public static double …
Run Code Online (Sandbox Code Playgroud) 如何将刷新消息发送到WPF网格或画布?
换句话说,我注意到在调试模式下,我可以编写代码向显示器发送一行,然后,如果该行不正确,我可以调整它 - 但前一行仍然存在.现在,我正在编写的代码根据用户点击的内容向显示器发送信息.因此,这必须意味着每次一组新的行和框和文本转到WPF中的网格或画布时,不会刷新显示.
使用C#代码,如何将刷新/重绘消息发送到WPF网格或画布?
我正在尝试用Java创建一个Mastermind.代码并不是很难,但我希望有一个非常好的界面.我有一个JPanel,它占用了我所有的JFrame,我使用surchargind repaint()
方法绘制了这个JPanel :
public void paint(Graphics g) //méthode permettant de dessiner les éléments sur la carte
{
super.paintComponents(g);
Graphics gr;
gr = MasterMindPane.getGraphics();
img = MasterMindPane.getToolkit().getImage("images/plateau4-8.jpg");
gr.drawImage(img, 0, 0, 600, 720, this);
gr = bouleRougePane.getGraphics();
img = bouleRougePane.getToolkit().getImage("images/bouleRouge.png");
//gr.drawImage(img, 535, 303, 45, 45, this);
gr.drawImage(img, 0, 0, 45, 45, this);
gr = bouleOrangePane.getGraphics();
img = bouleOrangePane.getToolkit().getImage("images/bouleOrange.png");
//gr.drawImage(img, 535, 303, 45, 45, this);
gr.drawImage(img, 0, 0, 45, 45, this);
}
Run Code Online (Sandbox Code Playgroud)
当我点击一个有Panel的图像时,我画出一个黄色圆圈:
private void bouleRougePaneMouseClicked(java.awt.event.MouseEvent evt) {
Graphics2D g2d = (Graphics2D) …
Run Code Online (Sandbox Code Playgroud) 我想根据从另一个线程收到的数据在我的面板上绘制一个图像.我确信数据和随后的像素数组运行良好,但repaint()永远不会工作.谁能告诉我这里出了什么问题?
import javax.swing.*;
import java.awt.*;
import java.awt.image.*;
/** Create an image from a pixel array. **/
public class PicturePlaza extends JApplet
{
ImagePanel fImagePanel;
ReadCom readComPort;
Thread readPortThread;
public void init () {
// initiate the read port thread so that it can receive data
readComPort = new ReadCom();
readPortThread = new Thread(readComPort,"ReadCom");
readPortThread.start();
Container content_pane = getContentPane ();
fImagePanel = new ImagePanel ();
content_pane.add (fImagePanel);
}
// Tell the panel to create and display the image, if pixel data …
Run Code Online (Sandbox Code Playgroud) 按下按钮时如何使用repaint()方法,Graphics p必须从头开始重新绘制所有内容?
谢谢.
import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JTextField;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class fares extends JPanel{
private static final long serialVersionUID = 1L;
public static int xaxis1,xaxis2,yaxis3,yaxis4;
public ControlsB(square) {
final JButton btn1 = new JButton("Resize");
final Box b = Box.createHorizontalBox();
b.add(new JLabel("Please enter range: "));
Box b0 = Box.createVerticalBox();//create a vertical box to stack the controls
Box b1 = Box.createHorizontalBox(); // create a horizontal box for the x-axis
//x-axis
b1.add(new JLabel("mark "));
b1.add(new JLabel("for"));
f1.setMaximumSize(new Dimension(100,30)); …
Run Code Online (Sandbox Code Playgroud) 我有这样的代码:
// In MyPanel.java
public void paintComponent(Graphics g)
{
super.paintComponent(g);
// Draw something
mypanel_count++;
}
// In Test.java
public void testLargeData()
{
while (notDone)
{
panel.repaint();
// do huge work
test_count++;
System.out.println("Test_count: " + test_count + ", MyPanel_count: " + mypanel_count);
}
}
// Output !!!
Test_count: 752, MyPanel_count: 23
Test_count: 753, MyPanel_count: 23
Test_count: 754, MyPanel_count: 23
Test_count: 755, MyPanel_count: 24
Run Code Online (Sandbox Code Playgroud)
但是当我改变panel.repaint()
时panel.paintComponent(panel.getGraphics())
,出局是正确的:
Run Code Online (Sandbox Code Playgroud)Test_count: 752, MyPanel_count: 752 Test_count: 753, MyPanel_count: 753 Test_count: 754, MyPanel_count: 754 Test_count: …