- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在开发一个代表我的拼贴的 GRAPH 数据结构的 Java 类,现在当我使用 graphics2D
组件绘制图形时遇到问题。只是当我按下“添加顶点”按钮时,我在一个空间范围内随机地绘制图形的节点,所以我必须将绘图代码放在“添加顶点”按钮的操作上,这使我不使用 paintComponent()
或 paint()
方法,因此当我最小化或仅弹出 Joptionepane 时,我绘制的整个图形都会消失!
这是我的代码,注意:Graph、StackX 和 Queue 类实现是我在同一个包上实现的
package Graphs;
import javax.swing.JLayeredPane;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JRootPane;
import javax.swing.JTextField;
import javax.swing.JButton;
import javax.swing.border.TitledBorder;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JScrollPane;
import DataStrucutres.Trees.BTNode;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.util.Random;
public class GraphGUI extends JPanel {
private JPanel panel;
private JTextField vetxTxt;
private JButton vertxBtn;
private JTextField ed1Txt;
private JTextField ed2Txt;
private JButton edBtn;
private JPanel panel_1;
private JButton creatBtn;
private JScrollPane scrollPane;
static int j = 1;
static Graph myGraph;
private JButton btnDfs;
private JButton btnBfs;
boolean check;
int[] X = new int[10];
int[] Y = new int[10];
int w, h;
Graphics2D g;
/**
* Create the panel.
*
*/
public GraphGUI() {
setBackground(Color.DARK_GRAY);
setLayout(null);
panel_1 = new JPanel();
panel_1.setBorder(new TitledBorder(null, "Controls",
TitledBorder.LEADING, TitledBorder.TOP, null, new Color(48, 48,
48)));
panel_1.setBounds(12, 117, 248, 188);
add(panel_1);
panel_1.setLayout(null);
vetxTxt = new JTextField();
vetxTxt.setEnabled(false);
vetxTxt.setBounds(7, 23, 124, 31);
panel_1.add(vetxTxt);
vetxTxt.setColumns(10);
vertxBtn = new JButton("Add Vertex");
vertxBtn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
try {
check = true;
String string = vetxTxt.getText().toUpperCase();
char r = string.charAt(0);
myGraph.addVertex(r);
vetxTxt.setText(null);
int x = (int) ((Math.random() * (700)) % 349 )+300;
int y = (int) ((Math.random() * (780)) % 349);
int width = (int) (Math.random() * (700 / 4));
int height = (int) (Math.random() * (780 / 4));
if (x + width > getWidth()) {
x = getWidth() - width;
}
if (y + height > getHeight()) {
y = getHeight() - height;
}
Color color = new Color((int) (Math.random() * 255),
(int) (Math.random() * 255),
(int) (Math.random() * 255));
Graphics2D g = (Graphics2D) getGraphics();
g.setColor(color);
g.drawOval(x, y, 30, 30);
g.drawString(r + "", x + 10, y + 18);
X[h] = x;
Y[w] = y;
h++;
w++;
j++;
} catch (ArrayIndexOutOfBoundsException e) {
JOptionPane.showMessageDialog(null,
"Graph is full of vertexes", "ERORR",
JOptionPane.ERROR_MESSAGE);
vetxTxt.setText(null);
} catch (Exception ex) {
JOptionPane.showMessageDialog(null, "Enter data pleas!",
"ERORR", JOptionPane.ERROR_MESSAGE);
vetxTxt.setText(null);
}
}
});
vertxBtn.setEnabled(false);
vertxBtn.setBounds(141, 24, 100, 29);
panel_1.add(vertxBtn);
ed1Txt = new JTextField();
ed1Txt.setEnabled(false);
ed1Txt.setBounds(7, 84, 50, 31);
panel_1.add(ed1Txt);
ed1Txt.setColumns(10);
ed2Txt = new JTextField();
ed2Txt.setEnabled(false);
ed2Txt.setBounds(81, 84, 50, 31);
panel_1.add(ed2Txt);
ed2Txt.setColumns(10);
edBtn = new JButton("Add Edge");
edBtn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
try {
int m = Integer.parseInt(ed1Txt.getText());
int v = Integer.parseInt(ed2Txt.getText());
ed1Txt.setText(null);
ed2Txt.setText(null);
myGraph.addEdge(m, v);
g.drawLine(X[m] + 8, Y[m] + 8, X[v] + 8, Y[v] + 8);
} catch (Exception e) {
JOptionPane.showMessageDialog(null,
"Entered edges is out of graph !", "ERORR",
JOptionPane.ERROR_MESSAGE);
}
}
});
edBtn.setEnabled(false);
edBtn.setBounds(141, 85, 100, 29);
panel_1.add(edBtn);
btnBfs = new JButton("BFS");
btnBfs.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
myGraph.bfs();
JOptionPane.showMessageDialog(null,
"BFS is : " + myGraph.getS());
} catch (Exception e2) {
JOptionPane.showMessageDialog(null,
"Graph is empty of vertexes", "ERORR",
JOptionPane.ERROR_MESSAGE);
vetxTxt.setText(null);
}
}
});
btnBfs.setEnabled(false);
btnBfs.setBounds(27, 139, 93, 29);
panel_1.add(btnBfs);
btnDfs = new JButton("DFS");
btnDfs.setEnabled(false);
btnDfs.setBounds(129, 139, 93, 29);
panel_1.add(btnDfs);
btnDfs.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
myGraph.dfs();
Graphics2D g = (Graphics2D) getGraphics();
JOptionPane.showMessageDialog(null,
"DFS is : " + myGraph.getS());
} catch (Exception e2) {
JOptionPane.showMessageDialog(null,
"Graph is empty of vertexes", "ERORR",
JOptionPane.ERROR_MESSAGE);
vetxTxt.setText(null);
}
}
});
creatBtn = new JButton("Creat Graph");
creatBtn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
g = (Graphics2D) getGraphics();
myGraph = new Graph();
vertxBtn.setEnabled(true);
vetxTxt.setEnabled(true);
ed1Txt.setEnabled(true);
ed2Txt.setEnabled(true);
edBtn.setEnabled(true);
btnBfs.setEnabled(true);
btnDfs.setEnabled(true);
creatBtn.setVisible(false);
JOptionPane
.showMessageDialog(
null,
"A graph is a structure consisting of a set of arrays (also called dimensions) and a set of edges . An edge is a pair of vertices . The two vertices are called the edge endpoints.",
"Graph", JOptionPane.PLAIN_MESSAGE);
}
});
creatBtn.setBounds(6, 395, 125, 21);
add(creatBtn);
}
}
最佳答案
so when i minimize or just the Joptionepane popped up , the entire graphics that i had drawn gone !
不要使用 getGraphics() 进行自定义绘画。正如您所注意到的,这幅画是暂时的。
so i have to put my drawing code on the action of add vertex button , that makes me not using paintComponent()
不,该操作应该调用自定义绘画面板上的方法来添加顶点。因此,您的类需要保留要绘制的顶点列表,然后 paintComponent()
方法中的自定义代码将迭代该列表并绘制所有顶点。
或者,另一个选项是在 BufferedImage 上绘制 Action 。然后,您可以在paintComponent() 方法中绘制BufferedImage(或者仅使用ImageIcon 将BufferedImage 添加到JLabel)。
参见Custom Painting Approaches有关使用 List 或 BufferedImage 进行自定义绘画的工作示例。
关于java - 如何避免 Java Graphics2D 组件在最小化或弹出 Joptionpane 时被删除?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30823572/
我知道如何通过iPhone开发创建sqlite数据库、向其中插入数据、删除行等,但我试图以编程方式删除整个数据库本身,但没有得到任何帮助。请有人指导我如何通过代码从设备中删除/删除整个 sqlite
请帮助指导如何在 Teradata 中删除数据库。 当我运行命令DROP DATABASE database_name时,我收到错误消息: *** Failure 3552 Cannot DROP d
Azure 警报规则的删除命令似乎不起作用,尝试了下面的方法,它返回状态为无内容,并且警报未被删除 使用的命令Remove-AzAlertRule -ResourceGroup "RGName"-Na
我在 flex 搜索中为大约50000个视频建立了索引,但是当它达到52000左右时,所有数据都被删除。嗯,这对我来说真的很奇怪,我没有为ES设置任何Heap大小或最小或最大大小的内存大小,因此它们没
我正在处理的问题是表单错误“输入由字母、数字、下划线或连字符组成的有效‘slug’。” 以下是我的表单字段验证: def clean_slug(self): slug = self.c
阅读文档,我希望 $("#wrap2").remove(".error") 从 中删除所有 .error 元素#wrap2。然而看看这个 JSFiddle: http://jsfiddle.net/h
嗨,我第一次尝试发现 laravel 我从 laravel 4.2 开始,我刚刚创建了一个新项目,但我误以为我写了这样的命令行 composer create-project laravel/lara
我已经在网上搜索了很长一段时间,但我找不到如何完全删除 apache 2.4 。 使用: Windows 7 c:\apache24\ 我已经尝试了所有命令,但没有任何效果。 httpd -k shu
可能是一个简单的答案,所以提前道歉(最少的编码经验)。 我正在尝试从任何列中删除具有特定字符串(经济 7)的任何行,并且一直在尝试离开此线程: How to drop rows from pandas
有几种方法可以删除/移除 vector 中的项目。 我有一个指针 vector ,我需要在类的析构函数中删除所有指针。 什么是最有效/最快甚至最安全的方式? // 1º std::for_each(v
我安装了一个 VNC 服务器并在某处阅读了我必须安装 xinetd 的信息。稍后我决定删除 VNC 服务器,所以我也删除了 xinetd。似乎 xinetd 删除了一些与 plesk 相关的文件,如果
我制作了一个从我们的服务器下载视频的应用。问题是: 当我取消下载时,我打电话: myAsyncTask.cancel(true) 我注意到,myAsyncTask 并没有在调用取消时停止...我的 P
是否可以在使用DELETE_MODEL删除模型之前检查模型是否存在我试图避免在尝试删除尚未创建的模型时收到错误消息。基本上我正在寻找对应的: DROP TABLE IF EXISTS 但对于模型。 最
我已经有了这个代码: 但它仍然会生成一个表行条目。 我想做的是,当输入的数量为0时,表行将被删除。请耐心等待,因为我是 php 和 mySQL 编码新手。 最佳答案 您忘记执行查询。应该是 $que
在 SharePoint 中,如果您删除/修改重复日历条目的单次出现,则不会真正删除/修改任何内容 - 相反,会创建一个新条目,告诉 SP 对于特定日期,该事件不存在或具有新参数. 因此,这可以通过删
在 routes.php 中我有以下路由: Route::post('dropzone', ['as' => 'dropzone.upload', 'uses' => 'AdminPhotoContr
在我的应用程序中,我正在尝试删除产品。当我第一次删除产品时,它会成功并且 URL 更改为/remove_category/15。我正在渲染到同一页面。现在,当我尝试删除另一个产品时,网址更改为/rem
这个问题被问了很多次,但给出的答案都是 GNU sed 特定的。 sed -i '' "/${FIND}/,+2d""$FILE" 给出“预期的上下文地址”错误。 有人可以给我一个例子,说明如何使用
在使用 V3 API 时,我找不到任何方法来删除和清理 Google map 。 我已经在 AJAX 站点中运行它,所以我想完全关闭它而无需重新加载页面。 我希望有一个 .unload() 或 .de
是否可以创建一个 Azure SQL 数据库用户来执行以下操作: 针对所有表和 View 进行 SELECT 创建/更改/删除 View 但用户不应该不拥有以下权限: 针对任何表或 View 插入/更
我是一名优秀的程序员,十分优秀!