- 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 entries;
public static List 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(){
@Ghi đè
public void actionPerformed(ActionEvent arg0) {
draft();
}
});
ball = new ArrayList();
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();
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();
}
@Ghi đè
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){
}khác{
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;
}khác{
q++;
}
}
bs = new Ball[q];
q = 0;
for (Ball b: ball){
if (!b.getTeamName().equals("X")){
bs[q++] = b;
}
}
ball = Arrays.asList(bs);
}
}
任何帮助将不胜感激。非常感谢!
1 Câu trả lời
您有很多问题:
您已重写顶级容器的 paint
方法。通常不建议这样做,因为它不是双缓冲的,并且可能会因动画和其他绘画更新而产生闪烁。
您未能调用super.paint
. paint
方法负责将所有子绘制方法整合在一起,包括 paintComponents
;但由于您不允许 paint
完成其工作,因此它不会为您渲染这些组件。
相反,
创建一个自定义组件,从 JPanel
等扩展而来。
将动画所需的所有逻辑添加到此组件。
重写它的paintComponent方法并向其中添加所有动画和自定义绘画。
将其添加到框架中。
看看Performing Custom PaintingVà Painting in AWT and Swing了解更多详情。
关于java - repaint() 时 JTextArea 不显示,但 revalidate() 时 Graphics 不更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16576361/
Tôi đang viết một phương thức Java với chữ ký sau. void Logger(Phương thức method, Object[] args); Nếu một phương thức (ví dụ ABC()) gọi phương thức Logger này, thì nó phải
Tôi mới làm quen với Java. Vấn đề của tôi là chương trình Java của tôi không tìm thấy tệp hình ảnh mà tôi đang cố gắng sử dụng làm JButton. (Hiện tại đoạn mã này không có tác dụng gì vì tôi chỉ muốn có được giao diện mong muốn của đoạn mã đầu tiên). Đây là mã lớp chính của tôi: packag
Được rồi, hôm nay tôi sẽ trả lời phỏng vấn và tôi đã viết mã Java trong nhiều năm. Trong cuộc phỏng vấn, anh ấy nói "Thu gom rác Java là một vấn đề khó khăn mà một số bạn của tôi đang cố gắng tìm ra. Còn bạn thì sao?". Cô ấy đang cố lừa dối tôi phải không? Hoặc toàn bộ cuộc sống của tôi
Bạn tôi đưa cho tôi một câu đố để giải. Nó diễn ra như thế này: Có 100 người. Mỗi người trong số họ, đến lượt mình, thực hiện những điều sau
Nếu tôi biên dịch một ứng dụng sử dụng mã Java 5 thành mã byte, thì các tệp .class kết quả có chạy được trên Java 1.4 không? Nếu cách sau có hiệu quả và tôi đang cố gắng sử dụng Java trong ứng dụng Java 1.4 của mình
Có một số câu hỏi về lý do tại sao Java không hỗ trợ các kiểu không dấu và một số câu hỏi về cách xử lý các kiểu không dấu. Tôi đã tìm kiếm và có vẻ như Scala cũng không hỗ trợ các kiểu dữ liệu không dấu. Các hạn chế là Java và S
Tôi chỉ muốn biết liệu bytecode được tạo trong một phiên bản Java có thể chạy trên các phiên bản Java khác không? Câu trả lời hay nhất Thông thường, bytecode có thể chạy trên các phiên bản Java mới hơn mà không cần sửa đổi. Nó sẽ không chạy trên các phiên bản cũ hơn trừ khi bạn sử dụng các tham số đặc biệt (
Tôi có một câu hỏi cơ bản về việc thực thi chương trình Java trong dấu nhắc lệnh. Trên một số máy, chúng ta cần chỉ định -cp. (đường dẫn lớp) thực thi chương trình java cùng lúc (test là tên tệp java và tệp .class tồn tại trong cùng một thư mục) jav
Tôi đã đọc StackOverflow một thời gian rồi và bây giờ tôi mới có đủ can đảm để đặt một câu hỏi. Tôi 20 tuổi và hiện đang theo học tại một trường đại học chuyên ngành CNTT ở quê nhà (Cluj-Napoca, Romania). Chỉ đủ để giới thiệu thôi :D. Về cơ bản, tôi có một ứng dụng kế toán.
Tôi có public JSONObject parseXML(String xml) { JSONObject jsonObject = XML.toJSONObject(xml);
Tôi đã triển khai một ngôn ngữ thông dịch đơn giản trong Java với kiểu dữ liệu động. Thật không may là tôi gặp phải vấn đề sau. Mã kiểm tra như sau: def main() { def ks = Map[[1, 2]].keySet()
Tiếp tục nhắc nhập một số từ 1 đến 10 - kết quả sẽ là thêm st, rd, th và nd vào số đó. Viết chương trình nhắc người dùng nhập bất kỳ số nguyên nào từ 1 đến 10, sau đó hiển thị số nguyên đó dưới dạng thứ tự có thêm hậu tố. công cộng
Tôi có DownloadFile.java này và nó tải xuống tệp như mong đợi: import java.io.*; import java.net.URL; public class DownloadFile {
Tôi muốn thêm độ trễ vào GUI. Tôi đặt 2 vòng lặp for rồi vẽ lại nhãn, nhưng 2 vòng lặp for này được thực thi lần lượt và nhãn được vẽ lại cho đến vòng lặp cuối cùng. Tôi có thể làm gì? đối với (int i = 0;
Tôi đang thực hiện một số thử nghiệm trên các mục danh sách của đối tượng Student, nhưng tôi thích tạo danh sách được mã hóa cứng trong đối tượng lớp Java và trích xuất dữ liệu từ đó thay vì kết nối với cơ sở dữ liệu và chọn các bản ghi trong tập kết quả. Tuy nhiên, đã lâu rồi tôi không làm điều này,
Tôi biết rằng việc tạo đối tượng được chia thành ba phần: khai báo khởi tạo khởi tạo classA{} classB mở rộng classA{} classA obj = new classB(1,1); để khởi tạo nó, bạn phải sử dụng
Tôi quan tâm đến việc xây dựng hệ thống theo dõi phương tiện sử dụng GPRS. Tuy nhiên, tôi có một số câu hỏi dành cho những người đã từng làm việc này: GPRS có phải là công nghệ tốt nhất không? Mọi người có biết vấn đề gì không? Tôi dự định sử dụng Java/Java EE - có công nghệ nào tốt hơn không? nếu như
Tôi có thể đảo ngược một mảng bằng phương pháp đệ quy, ví dụ: array = {1,2,3,4,5} array result = {5,4,3,2,1} nhưng kết quả của tôi vẫn là mảng đó, tôi không biết tại sao, vui lòng giúp tôi. lớp công khai Đệ quy {
Có cách chuẩn nào để thực hiện việc này không? Bao gồm mã nguồn Java - Mã kiểm thử - Tích hợp liên tục đơn vị chung Ant hoặc Maven (có thể kiểm soát hành trình) Triển khai công cụ kiểm soát phiên bản ClearCase lên máy chủ ứng dụng Cuối cùng, tôi hy vọng sẽ có một môi trường xây dựng và tích hợp tự động.
Tôi thậm chí còn không biết điều này có khả thi hay không, tôi thực sự nghi ngờ là có, nhưng nếu có thể, bạn có thể cho tôi biết cách thực hiện không? Tôi chỉ muốn biết cách in một số văn bản từ máy in. Bạn có ý tưởng nào không? Câu trả lời hay nhất Có những điều đơn giản hơn đang diễn ra ở đây. nhập javax.swin
Tôi là một lập trình viên xuất sắc, rất giỏi!