- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我使用 CardLayout 制作了一款游戏,并为排行榜设置了一个 JPanel。在排行榜中,我读取了两个文件(一个有名称,一个有时间),对它们进行排序并绘制前 5 个最快的时间,如下所示:
private void setBoard(){
reset();
try{
br = new BufferedReader (new FileReader("username.txt"));
accounts = ""+br.readLine().trim();
arrNames = accounts.split(" ");
br.close();
br = new BufferedReader (new FileReader("time.txt"));
allTimes = ""+br.readLine().trim();
arrTimesTemp = allTimes.split(" ");
arrTime = new double [arrTimesTemp.length];
br.close();
} catch (Exception er){
System.out.print("Error" + er);
}
for (int i=0;i<arrTime.length;i++)
arrTime[i]=Double.parseDouble(arrTimesTemp[i]);;
scores = new Score[arrTime.length];
for (int i=0;i<arrTime.length;i++)
scores[i] = new Score (arrNames[i],arrTime[i]);
Arrays.sort(scores, new MyComparator());
System.out.println("\n\n\n");
for (int i=0;i<arrTime.length;i++)
System.out.println(arrTime[i]+" "+arrNames[i]);
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(title, getWidth()/2-title.getWidth()/2+10, 125, this);
g.drawImage(txt, getWidth()/2-txt.getWidth()/2+10, 250, this);
setBoard();
g.setFont(new Font("Serif", Font.PLAIN, 25));
g.setColor(Color.white);
for (int i=0;i<5;i++){
g.drawString((i+1)+"-", numX, lineY);
g.drawString(scores[i].getName(), nameX, lineY);
g.drawString(""+scores[i].getTime(), timeX, lineY);
g.drawString("s", 515, lineY);
lineY+=40;
}
}
public void actionPerformed(ActionEvent e) {
if (e.getSource()==back)
RunGame.card.first(RunGame.c);
}
else if (e.getSource()==d) //d is a JButton
RunGame.card.show(RunGame.c,"Leaderboard");
最佳答案
I solved my problem. I just had to reset numX nameX timeX lineY each time I switched to leaderboard
LeaderBoardModel
这是在主要 View 之间共享的。这允许在代码的不同方面之间共享状态,而无需明确了解它的实际工作方式 - 模型成为一个自包含的工作单元并且可以管理它自己的状态。
import java.awt.CardLayout;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Test {
public static void main(String[] args) {
new Test();
}
public Test() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
LeaderBoardModel model = new LeaderBoardModel();
JFrame frame = new JFrame();
frame.setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.weightx = 1;
gbc.weighty = 1;
gbc.gridx = 0;
gbc.gridy = 0;
CardLayout cardLayout = new CardLayout();
JPanel mainPane = new JPanel(cardLayout);
mainPane.add(new GamePanel(model), "main");
mainPane.add(new LeaderBoardPanel(model), "leaderBoard");
cardLayout.show(mainPane, "main");
frame.add(mainPane, gbc);
JPanel buttons = new JPanel(new GridBagLayout());
JButton main = new JButton("Main");
JButton board = new JButton("Board");
buttons.add(main);
buttons.add(board);
main.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
cardLayout.show(mainPane, "main");
}
});
board.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
cardLayout.show(mainPane, "leaderBoard");
}
});
gbc.weightx = 1;
gbc.weighty = 0;
gbc.gridy++;
frame.add(buttons, gbc);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
// I'd prefer to use interfaces as a base line concept, but, this is
// is a demonstration of a concept, not a tutorial
public class Score implements Comparable<Score> {
private String name;
private int score;
public Score(String name, int score) {
this.name = name;
this.score = score;
}
public String getName() {
return name;
}
public int getScore() {
return score;
}
@Override
public int compareTo(Score o) {
return o.score - score;
}
@Override
public String toString() {
return name + " ~ " + score;
}
}
// I'd prefer to use interfaces as a base line concept, but, this is
// is a demonstration of a concept, not a tutorial
public class LeaderBoardModel {
private List<Score> scores;
public LeaderBoardModel() {
// This is where you'd consider loading the scores from
// the original file...
scores = new ArrayList<>(25);
Random rnd = new Random();
add(new Score("Shekhar", rnd.nextInt(99) + 1));
add(new Score("Priyanka", rnd.nextInt(99) + 1));
add(new Score("Vivi", rnd.nextInt(99) + 1));
add(new Score("Darwin", rnd.nextInt(99) + 1));
add(new Score("Hálfdan", rnd.nextInt(99) + 1));
add(new Score("Emmerson", rnd.nextInt(99) + 1));
add(new Score("Marie", rnd.nextInt(99) + 1));
add(new Score("Mikha'il", rnd.nextInt(99) + 1));
add(new Score("Jayanta", rnd.nextInt(99) + 1));
add(new Score("Theodosia", rnd.nextInt(99) + 1));
add(new Score("Sharleen", rnd.nextInt(99) + 1));
add(new Score("Kristian", rnd.nextInt(99) + 1));
add(new Score("Alberte", rnd.nextInt(99) + 1));
add(new Score("Maylis", rnd.nextInt(99) + 1));
add(new Score("Katayun", rnd.nextInt(99) + 1));
}
public void save() {
// Well, because it's nice to remember this stuff
}
public void add(Score score) {
// We could sort the list here, lots of ways to do it ...
// but waste the time if we don't actually need to
scores.add(score);
}
public List<Score> getScores() {
// Could use a flag to determine if this actually needs to be
// sorted or not ... but this is just a demonstration :/
Collections.sort(scores);
return Collections.unmodifiableList(scores);
}
}
public class GamePanel extends JPanel {
private LeaderBoardModel model;
private Random rnd = new Random();
public GamePanel(LeaderBoardModel model) {
this.model = model;
setLayout(new GridBagLayout());
JButton btn = new JButton("Win");
add(btn);
btn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
model.add(new Score("l334", rnd.nextInt(99) + 100));
}
});
}
}
public class LeaderBoardPanel extends JPanel {
private LeaderBoardModel model;
public LeaderBoardPanel(LeaderBoardModel model) {
this.model = model;
}
@Override
public Dimension getPreferredSize() {
return new Dimension(300, 300);
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g.create();
String highScore = "High Score";
FontMetrics fm = g2d.getFontMetrics();
int xPos = (getWidth() - fm.stringWidth(highScore)) / 2;
int yPos = 10;
g2d.drawString(highScore, xPos, yPos + fm.getAscent());
yPos += fm.getHeight() * 2;
List<Score> scores = model.getScores();
scores = scores.subList(0, Math.min(10, scores.size() - 1));
for (Score score : scores) {
String name = score.getName();
String value = Integer.toString(score.getScore());
xPos = (getWidth() / 2) - fm.stringWidth(name) - 5;
g2d.drawString(name, xPos, yPos + fm.getAscent());
xPos = (getWidth() / 2) + 5;
g2d.drawString(value, xPos, yPos + fm.getAscent());
yPos += fm.getHeight();
}
g2d.dispose();
}
}
}
关于java - 在 CardLayout 中重绘字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62480215/
嗨,我正在使用表单做一个小项目。目前我使用了 netbeans,但我的类变得非常复杂,因为所有 jpanel ie 卡都在一个类中,这是一个框架。我被要求简化。 我的问题是如果我把一个 jpanel
是否有一种优雅的方法可以用指向另一个对象的新引用替换添加到 CardLayout 中的对象的引用。我不知道现在我是否想得好,但我只想得到反馈。 最佳答案 而不是 bankAccPanel 直接添加将其
在我的项目中,我在 JFrame 中有一个 JPanel (bottomPanel) 需要交换,因此我在 BottomPanel 上使用 CardLayout。 在我的父 JFrame 中,我基本上在
我想熟悉 CardLayout,所以我正在制作一个模拟游戏菜单。该菜单应该有三个按钮,但布局部分很简单。 所以,我想做的是用带有三个按钮的菜单启动它。单人游戏按钮应该将用户看到的内容更改为单个按钮,这
我是java初学者。在第二个卡片面板中,用户名和密码对齐不正确。有什么办法可以解决吗?我还想知道使用多个框架的缺点是什么。 import java.awt.*; import java
我正在尝试编写一个简短的程序,它有一个带有标题的主页和 4 个按钮,其中 3 个按钮将离开主屏幕并转到一个新页面,您可以在其中相应地输入信息。我开始使用拖放编辑器,但通过论坛发现我应该使用卡片布局,而
这是我的 SSCE(尽管分为三个单独的类(class))。 启动.java public class Startup { public static void main(String args
每当我感觉自己已经学到了很多关于 Java 的知识时,我就会突然遇到一堵砖墙,让我感觉自己像个十足的白痴。今天的大问题是 CardLayout。至少我终于通过在字段列表中实例化 buttonsCard
我正在使用 Eclipse 和 Window Builder。但是我无法在 Window Builder 中使用卡片布局。所以我开始输入自己的代码,现在我卡在显示第一张卡上,该卡显示正确,但在单击 j
有没有办法告诉使用 CardLayout 的 JPanel 在哪里添加组件? 假设我在框架中央有一个这样的面板,并且我想在该面板内显示 3 个组件。这可能吗? 最佳答案 当然,这很容易。只需将 JPa
我在 CardLayout 中放置了一堆面板,其中第 n 面板取决于 (n - 1)th 面板。由于使用 CardLayout,您必须事先初始化并添加所有面板。因此,它使得管理状态变得比必要的更加困难
我制作了一个简单的程序,几乎可以完成所有操作,除了返回到第一个面板的开关之外。因此,如果我单击“Druck”按钮,它将把钱从一个银行帐户转移到另一个银行帐户,然后切换到第二个面板,其中显示两个帐户的余
我正在关注 YouTube 上关于 CardLayout 的教程。我下载了the original code ,效果很好。但对于我试图制作的程序,我需要一个单独的类来运行应用程序(即仅具有 main
我有一个已经运行并可以运行的游戏,我想为其添加一个标题屏幕。我正在尝试添加 CardLayout 以便在游戏和标题屏幕之间轻松切换。我当前的问题是没有显示任何内容。这是一张图片:/image/AooM
我创建了使用多个面板的应用程序,所以我选择了cardLayout。问题是,当执行以下代码时,在 UserInterface 方法 SinglePlayer() 中会发生一些奇怪的事情。我使用命令 fr
我正在为一个相当简单的棋盘游戏制作我的第一个 GUI。除了游戏 View 之外,我还需要主菜单和其他一些 View 。不幸的是,我的 GUI 看起来比早上更难看,因为整个菜单结构都在一个类中。我使用卡
这是我第一次尝试使用 Cardlayout 运行代码。这是 add 方法的异常(空指针)。不过,我也尝试弄清楚如何设计卡片布局,例如卡片并排或一张在下。我更喜欢后者。我已经尝试更改我的代码并阅读有关类
所以我有一个带有 CardLayout 的 JPanel。正如预期的那样,此 CardLayout 管理框架中面板的切换。切换是通过两个按钮完成的:“后退”和“下一步”。 我想知道当它位于最后一张卡上
关闭。这个问题需要debugging details .它目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and th
我知道这个问题之前已经被问过,但我似乎无法让答案起作用,也不理解它们。 我想做的是交换按钮单击的面板。这是我的主要功能: public class CreateWindow extends JFram
我是一名优秀的程序员,十分优秀!