- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在制作一个模拟 NHL 选秀彩票的程序,其中屏幕右侧应该有一个 JTextField,并且在左侧绘制弹跳的选秀球。我创建了一个名为 Ball 的类,它实现了 Runnable,并在我的主 DraftLottery 类中作为线程运行。但是,当我的绘制方法调用 repaint() 时,JTextArea 不显示。我尝试将 repaint() 切换为 revalidate(),但球没有移动。然后我尝试调用 repaint() 和 revalidate(),但它的行为与 repaint() 相同。这是我的 DraftLottery 类的代码:
package ca.WiltzSports.DraftLottery;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Random;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import ca.WiltzSports.DraftLottery.DraftBall.Ball;
public class DraftLottery extends JFrame {
public static final long serialVersionUID = 89L;
int teams;
String[] teamNames;
int[] balls;
JTextArea display;
JPanel screen;
JPanel animation;
List<String> entries;
public static List<Ball> ball;
String [] draftOrder;
Random rand;
int counter = 1;
javax.swing.Timer t;
public static int width = 1024;
public static int height = 768;
Graphics dbg;
Image dbImage;
int i = 0;
public DraftLottery(int teams, String[] teamNames, int[] balls){
t = new javax.swing.Timer(2000, new ActionListener(){
@Override
public void actionPerformed(ActionEvent arg0) {
draft();
}
});
ball = new ArrayList<Ball>();
rand = new Random();
this.teams = teams;
this.teamNames = teamNames;
this.balls = balls;
this.screen = new JPanel();
this.animation = new JPanel();
display = new JTextArea(20,50);
display.setBackground(Color.BLACK);
display.setForeground(Color.YELLOW);
draftOrder = new String[teams];
this.entries = new ArrayList<String>();
addTeamBalls();
setSize(width,height);
setVisible(true);
setLocationRelativeTo(null);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setTitle("Draft Lottery");
setLayout(new BorderLayout());
screen.add(display);
add("East", new JScrollPane(display));
add("West", animation);
t.start();
}
@Override
public void paint(Graphics g){
dbImage = createImage(getWidth(), getHeight());
dbg = dbImage.getGraphics();
Graphics2D g2d = (Graphics2D) dbg;
draw(g2d);
g.drawImage(dbImage, 0, 0, this);
Ball.runBalls(ball);
}
public void draw(Graphics2D g2d){
for (Ball b: ball){
b.draw(g2d);
}
revalidate();
repaint();
}
public void addTeamBalls(){
for (int c = 0; c < teamNames.length; c++){
for (int j = 0; j < balls[c]; j++){
entries.add(teamNames[c]);
ball.add(new Ball(rand.nextInt(width/2 - Ball.SIZE), rand.nextInt(height - Ball.SIZE), teamNames[c], i++));
}
}
}
public void draft(){
int q = 0;
String [] e = entries.toArray(new String[entries.size()]);
String draftedTeam;
int index = rand.nextInt(entries.size());
draftedTeam = e[index];
if(!draftedTeam.equals("X")){
display.append("" + counter++ + ". " + draftedTeam + "\n");
for(int c = 0; c < e.length; c++){
if (e[c].equals(draftedTeam)){
e[c] = "X";
}
}
removeBalls();
}else {
boolean again = false;
for (int c = 0; c < e.length; c++){
if (!e[c].equals("X")){
again = true;
}
}
if(again){
}else{
t.stop();
display.append("DRAFT LOTTERY COMPLETE");
}
}
entries = Arrays.asList(e);
}
public void removeBalls(){
Ball [] bs;
int q = 0;
for (Ball b: ball){
if (b.getTeamName().equals("X")){
continue;
}else{
q++;
}
}
bs = new Ball[q];
q = 0;
for (Ball b: ball){
if (!b.getTeamName().equals("X")){
bs[q++] = b;
}
}
ball = Arrays.asList(bs);
}
}
任何帮助将不胜感激。非常感谢!
最佳答案
您有很多问题:
您已重写顶级容器的 paint
方法。通常不建议这样做,因为它不是双缓冲的,并且可能会因动画和其他绘画更新而产生闪烁。
您未能调用super.paint
。 paint
方法负责将所有子绘制方法整合在一起,包括 paintComponents
;但由于您不允许 paint
完成其工作,因此它不会为您渲染这些组件。
相反,
创建一个自定义组件,从 JPanel
等扩展而来。
将动画所需的所有逻辑添加到此组件。
重写它的paintComponent方法并向其中添加所有动画和自定义绘画。
将其添加到框架中。
看看Performing Custom Painting和 Painting in AWT and Swing了解更多详情。
关于java - repaint() 时 JTextArea 不显示,但 revalidate() 时 Graphics 不更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16576361/
在我的理解中,这两个指令都意味着缓存服务器将要求原始服务器重新验证来自客户端浏览器的请求。这两个指令有什么区别? 最佳答案 RFC 7234, section 5.2.2.7 , 解释: The "p
Cache-Control: no-cache 与 Cache-Control: max-age=0, must-revalidate, proxy-revalidate 的 HTTP 响应有什么区别
我经常用 Cache-Control: no-cache 或 Cache-Control: max-age=0 规范说must-revalidate是为了max-stale...(服务器问题max-s
因此,我编写了一段代码,在单击框架南部区域的按钮后,您会得到一个矩形。 但是由于这个原因,单击按钮后代码似乎不起作用 public void actionPerformed(ActionEvent e
我有一个主 JPanel、一个内部 JPanel 和一个用于内部 JPanel 的 JScrollPane mainPanel = new JPanel(); innerPanel = new JPa
我就遇到过这样的问题。当我在容器上调用 .revalidate 时,出现 IndexOutOfBoundsException。 我有一个 Runnable 类,它可以增加或减少组件的边距。我用它来制作
我正在尝试创建一个窗口框架来显示游戏窗口。我在 GameWindow 类中扩展了 JFrame 并创建了两个方法:drawBackground(用实心矩形填充屏幕)和 drawGrid,使用 for
**你好,我正在尝试用 java 创建一个存档器。这意味着我不断地从流中读取和写入。我希望能够更新 JProgressBar 以显示我已经写了多少。我的代码当前在存档中的每个条目之后更新进度栏。我的变
对于我的程序,我有一个 JPane,随着游戏的进行,它会向面板添加标签,但是我可以让面板显示的唯一方法是使用 add(label) 然后重新验证,反之亦然以删除标签。 我的问题是,一旦我在屏幕上有超过
我们正在使用Varnish缓存6.2来位于WebAPI后端的前面。 后端会在某些请求上向后发送一个缓存控制 header ,以便我们可以缓存更长的时间。 但是-如果后端出现故障并保持故障状态,我们将在
我正在尝试使Varnish与最后修改的 header 一起使用,但是无论我做什么,我的页面都会在120年代被缓存,并且Varnish永远不会使用后端进行验证。 我的后端正在发送这些 header :
我有这个 NextJS 站点,其中有从 Firestore 加载数据的 getStaticProps。 我有这个: return { props: { allPosts: post
我对java很陌生,我正在尝试创建我自己的拼字游戏。我创建了自己的 Board 类和 Tile 类 JPanel。当我在板上绘制图 block 时: Tile tile = new Tile(curr
Cloudflare 记录了 Cache-Control 的指令列表 header ,包括 stale-while-revalidate . stale-while-revalidate= When
网址:http://tinyurl.com/358lh6a 每当 DomainSelect(域扩展名)无论如何更改时,我都想重新验证宫殿地址(他们想要的域,形式是:名称)。 我尝试了一个简单的方法:
我在 JPanel 中有一个方法 private void paintScore(Graphics2D g) { Font scoreFont = new Font("Arial", Font
我正在组合一个 Swing 应用程序,我经常想在其中替换 JPanel 的内容。为此,我调用 removeAll(),然后添加我的新内容,然后调用 revalidate()。 但是,我发现旧内容实际上
本文整理了Java中org.knowm.xchart.XChartPanel.revalidate()方法的一些代码示例,展示了XChartPanel.revalidate()的具体用法。这些代码示例
如果应用中的购买调用 BillingClient.BillingResponseCode.ITEM_ALREADY_OWNED:需要调用 acknowledgePurchase(... 重新验证订单的
我在尝试查询表 AVC 时突然开始遇到此错误。 ORA-04045: errors during recompilation/revalidation of PUBLIC.AVC ORA-04098:
我是一名优秀的程序员,十分优秀!