- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在创建一个可视化排序的程序,我的代码似乎没问题。但是,当我运行它时,它似乎没有更新 GUI。
我已经尝试过验证和重新验证,它确实改变了 GUI,但它大多只是破坏了它。
public void createWindow(Container win) {
bars = new JPanel();
bars.setLayout(new GridBagLayout());
c = new GridBagConstraints();
startup = true;
updateBars();
startup = false;
bars.setBackground(Color.GRAY);
bars.setBorder(BorderFactory.createMatteBorder(4, 4, 4, 2, Color.BLACK));
win.setLayout(new GridBagLayout());
c.gridx = 0;
c.gridy = 0;
c.gridheight = 2;
c.gridwidth = 3;
Dimension d2 = new Dimension(325, 250);
bars.setPreferredSize(d2);
bars.setMaximumSize(d2);
bars.setSize(d2);
win.add(bars, c);
JPanel sorts = new JPanel();
sorts.setBackground(Color.GRAY);
sorts.setBorder(BorderFactory.createMatteBorder(4, 2, 2, 4, Color.BLACK));
JLabel sortPrompt = new JLabel("Choose a sort: ");
sortPrompt.setFont(sortPrompt.getFont().deriveFont(14.0f));
sortPrompt.setHorizontalAlignment(SwingConstants.LEFT);
c.gridx = 0;
c.gridy = 0;
c.gridwidth = 1;
c.gridheight = 1;
sorts.add(sortPrompt, c);
String sortNames[] = {"Bogo Sort", "Gnome Sort", "Insertion Sort", "Slow sort"};
JComboBox sortAlgs = new JComboBox(sortNames);
sortAlgs.setFont(sortAlgs.getFont().deriveFont(14.0f));
sortAlgs.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
sortChosen = (String)(sortAlgs.getSelectedItem());
System.out.println(sortChosen);
}
});
c.gridx = 1;
c.gridy = 1;
c.gridwidth = 1;
c.gridheight = 1;
sorts.add(sortAlgs, c);
JLabel delayPrompt = new JLabel("Choose a delay time: ");
delayPrompt.setFont(delayPrompt.getFont().deriveFont(13.0f));
c.gridx = 0;
c.gridy = 2;
c.gridwidth = 3;
sorts.add(delayPrompt, c);
String delays[] = {"1", "2", "3", "4", "5", "10", "25", "50", "100"};
JComboBox delayTimes = new JComboBox(delays);
delayTimes.setFont(delayTimes.getFont().deriveFont(13.0f));
delayTimes.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
delayTime = Integer.valueOf((String)(delayTimes.getSelectedItem()));
}
});
c.gridx = 1;
c.gridy = 2;
sorts.add(delayTimes, c);
JButton start = new JButton("Start");
start.setFont(start.getFont().deriveFont(16.0f));
start.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
sortCompleted = 0;
while (sortCompleted != 1) {
startBogoSort();
}
}
});
c.gridwidth = 1;
c.gridx = 0;
c.gridheight = 1;
c.gridy = 3;
sorts.add(start, c);
JButton stop = new JButton("Stop");
stop.setFont(stop.getFont().deriveFont(16.0f));
stop.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
sortCompleted = 1;
}
});
c.gridwidth = 1;
c.gridx = 1;
c.gridheight = 1;
c.gridy = 3;
sorts.add(stop, c);
c.gridx = 3;
c.gridy = 0;
c.gridheight = 2;
c.gridwidth = 2;
Dimension d3 = new Dimension(250, 250);
sorts.setPreferredSize(d3);
win.add(sorts, c);
}
public void updateBars() {
n = 10;
arr = new ArrayList<Integer>(n);
for (int i = 0; i < n; i++) {
arr.add(i + 1);
}
if (startup == true) {
Collections.shuffle(arr);
}
int maxHeight = 0;
for (int i = 0; i < arr.size(); i++) {
int height = arr.get(i);
if (height > maxHeight) {
maxHeight = height;
}
int yPos = n - height * 20;
Rectangle r = new Rectangle();
r.setBounds(i * 20, (yPos * 2) + ((height / 2) * 20), 20, height * 20);
if (i == 0) {
if (arr.get(i) > arr.get(i + 1)) {
r.setBorder(BorderFactory.createMatteBorder(1, 1, 1, 1, Color.BLACK));
} else if (arr.get(i) < arr.get(i + 1)) {
r.setBorder(BorderFactory.createMatteBorder(1, 1, 1, 0, Color.BLACK));
}
} else if (i == arr.size() - 1) {
if (arr.get(i - 1) > arr.get(i)) {
r.setBorder(BorderFactory.createMatteBorder(1, 0, 1, 1, Color.BLACK));
} else if (arr.get(i - 1) < arr.get(i)) {
r.setBorder(BorderFactory.createMatteBorder(1, 1, 1, 1, Color.BLACK));
}
} else {
if (arr.get(i - 1) > arr.get(i) && arr.get(i) > arr.get(i + 1)) {
r.setBorder(BorderFactory.createMatteBorder(1, 0, 1, 1, Color.BLACK));
} else if (arr.get(i - 1) < arr.get(i) && arr.get(i) > arr.get(i + 1)) {
r.setBorder(BorderFactory.createMatteBorder(1, 1, 1, 1, Color.BLACK));
} else if (arr.get(i - 1) > arr.get(i) && arr.get(i) < arr.get(i + 1)) {
r.setBorder(BorderFactory.createMatteBorder(1, 0, 1, 0, Color.BLACK));
} else if (arr.get(i - 1) < arr.get(i) && arr.get(i) < arr.get(i + 1)) {
r.setBorder(BorderFactory.createMatteBorder(1, 1, 1, 0, Color.BLACK));
}
}
c.gridheight = height;
c.ipadx = 20;
c.ipady = height * 20;
c.anchor = GridBagConstraints.SOUTH;
c.gridy = n - height;
bars.add(r, c);
}
}
public void startBogoSort() {
while (sortCompleted != 1) {
int totalSize = arr.size() - 1;
for (int i = 1; i < totalSize; i++) {
if (arr.get(i - 1) > arr.get(i)) {
sortCompleted = 0;
i = totalSize + 1;
} else {
sortCompleted = 1;
}
}
if (sortCompleted == 0) {
bars.removeAll();
Collections.shuffle(arr);
}
}
}
抱歉有些困惑,但它应该显示一个面板,其中包含需要排序的条形图,并且应该显示随着时间的推移对条形图进行排序(延迟尚未实现,但我至少应该看到最终的效果)现阶段的结果)。但实际发生的情况是它目前卡住了。正如我之前所说,我尝试过 validate() 和 revalidate() 方法,但它们似乎进一步破坏了代码。
最佳答案
在这种情况下我发现了我的错误。我需要在 updateBars() 方法中创建 GridBagConstraints 和 GridBagLayout 的新实例。另外,我使用 TimerTask 和 Timer 来更新 GUI。事实证明这是一个比我最初想象的简单得多的解决方案。
这是我更新的代码:
public void createWindow(Container win) {
bars = new JPanel();
c = new GridBagConstraints();
startup = true;
updateBars();
startup = false;
bars.setBackground(Color.GRAY);
bars.setBorder(BorderFactory.createMatteBorder(4, 4, 4, 2, Color.BLACK));
win.setLayout(new GridBagLayout());
c.gridx = 0;
c.gridy = 0;
c.gridheight = 2;
c.gridwidth = 3;
bars.setBounds(0, 0, 325, 200);
c.fill = c.VERTICAL;
win.add(bars, c);
JPanel sorts = new JPanel();
sorts.setLayout(new GridBagLayout());
sorts.setBackground(Color.GRAY);
sorts.setBorder(BorderFactory.createMatteBorder(4, 2, 4, 4, Color.BLACK));
JLabel sortPrompt = new JLabel("Choose a sort: ");
sortPrompt.setFont(sortPrompt.getFont().deriveFont(15.0f));
c.ipady = 20;
c.gridx = 0;
c.gridy = 0;
c.gridwidth = 2;
c.gridheight = 1;
sorts.add(sortPrompt, c);
String sortNames[] = {"Bogo Sort", "Gnome Sort", "Insertion Sort", "Bubble Sort"};
JComboBox sortAlgs = new JComboBox(sortNames);
sortAlgs.setFont(sortAlgs.getFont().deriveFont(15.0f));
sortAlgs.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
sortChosen = (String)(sortAlgs.getSelectedItem());
System.out.println(sortChosen);
}
});
c.anchor = GridBagConstraints.WEST;
c.ipady = 20;
c.gridx = 2;
c.gridy = 0;
c.gridwidth = 1;
c.gridheight = 1;
sorts.add(sortAlgs, c);
JLabel delayPrompt = new JLabel("Choose a delay time: ");
delayPrompt.setFont(delayPrompt.getFont().deriveFont(15.0f));
c.gridx = 0;
c.gridy = 1;
c.gridwidth = 2;
c.anchor = GridBagConstraints.CENTER;
sorts.add(delayPrompt, c);
String delays[] = {"1", "2", "3", "4", "5", "10", "25", "50", "100", "500", "1000"};
JComboBox delayTimes = new JComboBox(delays);
delayTimes.setFont(delayTimes.getFont().deriveFont(15.0f));
delayTimes.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
delayTime = Integer.valueOf((String)(delayTimes.getSelectedItem()));
System.out.println(delayTime);
}
});
c.anchor = GridBagConstraints.WEST;
c.gridx = 2;
c.gridy = 1;
c.gridwidth = 1;
sorts.add(delayTimes, c);
JButton start = new JButton("Start");
start.setFont(start.getFont().deriveFont(15.0f));
start.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
sortCompleted = 0;
if (sortChosen.equals(null)) {
sortChosen= "Bogo Sort";
}
if (sortChosen.equals("Bogo Sort")) {
startBogoSort();
} else if (sortChosen.equals("Insertion Sort")) {
startInsertionSort();
} else if (sortChosen.equals("Bubble Sort")) {
startBubbleSort();
} else if (sortChosen.equals("Gnome Sort")) {
System.out.println("This sort is not implemented yet");
}
}
});
c.gridwidth = 1;
c.gridx = 0;
c.gridheight = 1;
c.gridy = 3;
c.anchor = GridBagConstraints.CENTER;
sorts.add(start, c);
JButton shuffle = new JButton("Shuffle");
shuffle.setFont(shuffle.getFont().deriveFont(15.0f));
shuffle.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
TimerTask shuffleTask = new TimerTask () {
public void run() {
bars.removeAll();
Collections.shuffle(arr);
updateBars();
bars.revalidate();
}
};
Timer shuffler = new Timer();
shuffler.schedule(shuffleTask, 10);
}
});
c.gridwidth = 1;
c.gridx = 1;
c.gridheight = 1;
c.gridy = 3;
sorts.add(shuffle, c);
JButton stop = new JButton("Stop");
stop.setFont(stop.getFont().deriveFont(15.0f));
stop.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (sortChosen.equals("Bogo Sort")) {
bogo.cancel();
bogo.purge();
} else if (sortChosen.equals("Bubble Sort")) {
bubble.cancel();
bubble.purge();
}
}
});
c.gridwidth = 1;
c.gridx = 2;
c.gridheight = 1;
c.gridy = 3;
sorts.add(stop, c);
blank = new JLabel(" ");
c.gridx = 1;
c.gridy = 5;
c.gridwidth = 2;
sorts.add(blank, c);
c.gridx = 3;
c.gridy = 0;
c.gridheight = 2;
c.gridwidth = 2;
Dimension d3 = new Dimension(360, bars.getHeight());
sorts.setPreferredSize(d3);
win.add(sorts, c);
}
public void updateBars() {
bars.setLayout(new GridBagLayout());
c = new GridBagConstraints();
if (startup == true) {
n = 10;
arr = new ArrayList<Integer>(n);
for (int i = 0; i < n; i++) {
arr.add(i + 1);
}
}
int maxHeight = 0;
for (int i = 0; i < arr.size(); i++) {
int height = arr.get(i);
if (height > maxHeight) {
maxHeight = height;
}
int yPos = n - height * 20;
Rectangle r = new Rectangle();
r.setBounds(i * 20, (yPos * 2) + ((height / 2) * 20), 20, height * 20);
if (i == 0) {
if (arr.get(i) > arr.get(i + 1)) {
r.setBorder(BorderFactory.createMatteBorder(1, 1, 1, 1, Color.BLACK));
} else if (arr.get(i) < arr.get(i + 1)) {
r.setBorder(BorderFactory.createMatteBorder(1, 1, 1, 0, Color.BLACK));
}
} else if (i == arr.size() - 1) {
if (arr.get(i - 1) > arr.get(i)) {
r.setBorder(BorderFactory.createMatteBorder(1, 0, 1, 1, Color.BLACK));
} else if (arr.get(i - 1) < arr.get(i)) {
r.setBorder(BorderFactory.createMatteBorder(1, 1, 1, 1, Color.BLACK));
}
} else {
if (arr.get(i - 1) > arr.get(i) && arr.get(i) > arr.get(i + 1)) {
r.setBorder(BorderFactory.createMatteBorder(1, 0, 1, 1, Color.BLACK));
} else if (arr.get(i - 1) < arr.get(i) && arr.get(i) > arr.get(i + 1)) {
r.setBorder(BorderFactory.createMatteBorder(1, 1, 1, 1, Color.BLACK));
} else if (arr.get(i - 1) > arr.get(i) && arr.get(i) < arr.get(i + 1)) {
r.setBorder(BorderFactory.createMatteBorder(1, 0, 1, 0, Color.BLACK));
} else if (arr.get(i - 1) < arr.get(i) && arr.get(i) < arr.get(i + 1)) {
r.setBorder(BorderFactory.createMatteBorder(1, 1, 1, 0, Color.BLACK));
}
}
c.gridheight = height;
c.ipadx = 20;
c.ipady = height * 20;
c.anchor = GridBagConstraints.SOUTH;
c.gridy = n - height;
bars.add(r, c);
}
}
public void startBogoSort() {
if (delayTime == 0) {
delayTime = 1;
}
TimerTask bogoTask = new TimerTask() {
public void run() {
blank.setText(" ");
for (int i = 1; i < arr.size(); i++) {
if (arr.get(i - 1) > arr.get(i)) {
sortCompleted = 0;
i = arr.size() + 1;
} else {
sortCompleted = 1;
}
}
if (sortCompleted == 0) {
bars.removeAll();
Collections.shuffle(arr);
updateBars();
bars.revalidate();
} else {
blank.setText("Sort Completed");
bogo.cancel();
bogo.purge();
}
}
};
bogo.scheduleAtFixedRate(bogoTask, 0, delayTime);
}
关于java - 显示没有像应有的那样改变,但代码看起来不错?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56114326/
#include #include #include using namespace std::chrono; int main(int arc, char* argv[]) { con
我是 opencv 的新手。当我将 sRGB png 提供给它时,我发现以下代码交换了红色和蓝色 channel 。我应该责怪哪个函数,imread 还是 fromarray? 最佳答案 是的,O
我正在使用以下代码,它缩小了每一行,并且由于某种原因整个用户界面也丢失了。我该如何解决?
它是关于以下设置的:Linux 机器、bash、adb、带有 Busybox 的嵌入式 Linux 目标系统。对于目标系统,以下适用: adb shell echo $SHELL /bin/sh ad
当我在 Android Studio 上创建一个空 fragment 时,它会生成以下代码: /** * A simple {@link Fragment} subclass. * Activit
我正在尝试从 Meteor 应用程序的服务器端发布用户的 Facebook 提要: result = Meteor.http.call 'POST', "https://graph.faceb
目前我有两个不同的查询,它们返回完全相同的结果,但是,更改从中过滤结果的参数会使它们以非常不同的方式运行。 搜索 cartography 时的结果 查询 #1: 22 行/~860 毫秒; SELEC
我已经创建了结构: typedef struct { short s; int i; struct Ss { short s; }; } S;
我想在 Java 中打印反斜杠 t。但每当我尝试时,它实际上都将它作为\t 运算符。双反斜杠不起作用。我该怎么做。 最佳答案 例如通过添加另一个反斜杠来转义反斜杠 System.out.println
我想弄清楚为什么 UIActivityViewController 发送一个稍微转换过的字符串来分享给邮件和微信。 这是我的代码: let activityViewController = UIAct
创建标准 SQLite 游标后,我将使用以下方法遍历条目: while (cursor.moveToNext()) { } 所有行都被正确处理。我读过的所有文档都表明您需要发出 moveToFirst
我正在尝试创建一个基本论坛,但在 SQL 中仅打印一行时遇到问题。这是我的 PHP: {$title}"; } } else { print "failed to reach post
我的新 div 元素 ( ) 似乎隐藏在图像后面。我键入的任何内容都显示在图像后面。我想在背景图片之后继续工作。 这是我的代码: DISPLAY
UPD。一行代码解决了问题:.lean() axplanation here 我在 Model.find(...blablabla : [ {"_id":"578763de6e8e0542195ef4
我在 Ubuntu 16.04 中安装了 Tomcat 8.0.45。我使用 let's encrypt 生成的证书启用了 HTTPS 连接器。它就像一个魅力。但是今天Tomcat无法启动HTTPS连
今天,我在一台全新安装了 Windows 7 Ultimate 64 位的新笔记本电脑上安装了 Visual Studio 2010 Professional。我非常习惯于 Visual Studio
根据 Oracle,我应该能够将 .intValue() 和 .compareTo() 之类的方法应用于 double ,但是当我编写 dbl.toString( ) 例如,在 NetBeans 中,
正在为应用程序开发一些拖放功能,虽然可以使用“重影图像”来完成很多事情,将毒品从一个地方转移到另一个地方,但它们看起来总是有点“褪色” - 因此得名鬼影。是否有可能使这些具有与原始颜色相同的深度?谢谢
我是这方面的新手,很抱歉犯了一些愚蠢的错误。快乐学习。每当我使用 URL : localhost:3000/posts/whatever 时,我都会收到无法获取错误。在你问之前,是的,那是在我将内容放
背景 这自然是合法的: let closure: (Int, Int) -> () = { print($0 + $1) } closure(1, 2) // 3 鉴于,自进化提案实现以来 SE-01
我是一名优秀的程序员,十分优秀!