我从这里得到了一些有趣的想法和批评,这篇和这篇文章(参见上一篇关于GUI代码的帖子).尽管如此,我仍然对某些事情感到困惑.主要是,显示用户引入图形的最便宜的方式是什么?
更具体而言,我使用了paintComponent()
从方法JPanel
通过使这个类的一个对象中的类MouseDragged()
与方法一起paintComponent(getGraphics())
方法(AuxClass2
和AuxClass1
相应地).
显然,使用getGraphics()
而paintComponent()
不是repaint()
坏主意,我怀疑与内存使用有关.AuxClass2
每次用户拖动鼠标时调用也是一个坏主意.
JPanel vs Canvas(即swing vs awt)也有点令人困惑.使用什么以及何时使用?
我一直试图找到一个解决方法,但没有找到一个,特别是对于getGraphics()
方法:如何将图形添加到面板?
我是java中的GUI新手.
例如,我只需要更新1个元素(例如JLabel
).在Tkinter的我会使用类似root.update()
或root.update_idletasks()
.我想知道使用swing制作的应用程序是否存在类似的简单函数.我试着gui_element.SetVisible(false)
和gui_element.SetVisible(true)
以及类似的东西,但不是很成功.我怀疑javax.swing.Timer
应该工作,但不知道如何.
编辑这是代码.如果您发现其他错误,请告诉我.谢谢
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
public class sof_sample{
/**
* @param args
*/
private static JFrame frame1 = new JFrame("Fractal Geometry");
public static JButton quit_button = new JButton("Quit");
private static JButton run_button = new JButton("Run");
private static JLabel label1 = new JLabel();
public static JLabel label_iter = new JLabel();
private static …
Run Code Online (Sandbox Code Playgroud) 我正在学习Swing GUI设计.我还没有完全解决的一件事是如何添加添加Canvas
到容器中的特定位置.
更具体地说:我创建了一个Canvas
使用Paint
方法的类.此类的对象将添加到Panel中.我不太明白的是,它是如何以及在何处添加到Panel中的.在Tkinter中Canvas
是一个仅包含图像的小部件,但在Swing中,没有类似的小部件(可能不是最好的单词)添加到仅包含Canvas对象的Frame,而不包含任何其他内容.
对不起,如果它太模糊,我正在添加一个自包含的代码.请忽略文本字段和标签.
import java.awt.BorderLayout;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JSeparator;
import javax.swing.JTextField;
//frame class
class frame_class2 extends JFrame implements ActionListener{
//declare buttons
JButton draw_button = new JButton("Draw");
JButton quit_button= new JButton("Quit");
JButton info_button = new JButton("Info");
//declare labels
JLabel x_loc = new JLabel("X:");
JLabel y_loc = new JLabel("Y:");
JLabel w_label= …
Run Code Online (Sandbox Code Playgroud) Java约定的10.2节建议使用类名而不是对象来使用静态变量或方法,即MyClass.variable1
或MyClass.methodName1()
代替
MyClass Obj1 = new MyClass();
Obj1.variable1;
Obj1.methodName1();
Run Code Online (Sandbox Code Playgroud)
虽然我怀疑这与内存使用有关,但没有解释这背后的基本原理.如果有人能够解释这一点会很棒.
我是图像分割的新手,但我需要这样做才能获得机器学习分类器的数据库.
基本上我有一个类似于这个图像的视频:
我的工作是识别前景中的奶牛,或者至少识别任何奶牛.我意识到有一个遮挡问题,但对于一个启动器我想要正确地分割一个孤独的牛,就像它周围的红色矩形(手绘).
在不太具有挑战性的问题中,例如,我通过为每个像素添加一个阈值来区分,该阈值对于对象变为(0,0,0)或对于背景变为(255,255,255):
然后我用相同的值标记像素以获得类并获得足够大的'blob'的矩形.
对于上面的图像,这种方法不起作用,因为对象和背景相似+有很多阴影,侧面照明等,所以我不知道如何处理它.欢迎任何建议.
python image image-processing image-segmentation scikit-image
我用Java编写了以下微绘画程序:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Graphics;
import java.awt.GridLayout;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
class AuxClass1 extends JFrame implements MouseListener, MouseMotionListener{
private JPanel panel1 = new JPanel();
private JPanel panel2 = new JPanel();
private JLabel label1_x = new JLabel();
private JLabel label1_y = new JLabel();
private JLabel label1_x_info = new JLabel("");
private JLabel label1_y_info = new JLabel("");
//add a container keep panels with widgets
private Container con1 …
Run Code Online (Sandbox Code Playgroud) 这是我上一个问题的后续行动.我尽可能地简化了事情,但它仍然不起作用!虽然我使用的好东西getGraphics()
.
关于这里出了什么问题的详细解释非常受欢迎.我怀疑这是我addMouseListener()
在这里使用方法的方式有问题.
编辑完全重写了代码.但仍然无法正常工作.
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class RunClass{
static MainClass1 inst1 = new MainClass1();
public static void main(String args[]){
JFrame frame1 = new JFrame();
frame1.add(inst1);
frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame1.setTitle("NewPaintToolbox");
frame1.setSize(200, 200);
frame1.setLocationRelativeTo(null);
frame1.setVisible(true);
}
}
class MainClass1 extends JPanel implements MouseListener, MouseMotionListener{
int xvar=30;
int yvar=30;
//static PaintClass22 inst1 = new PaintClass22();
@Override
public void mouseClicked(MouseEvent arg0) {
// TODO Auto-generated method stub
xvar …
Run Code Online (Sandbox Code Playgroud) 制作这个画笔程序我决定要清除面板容器(panel2
在链接代码中).我使用过PanelName.setForeground(null)
它.我想知道的是,这种方法是否存在已知的缺点以及从容器中删除图形对象的其他方法.
经过多次检查和谷歌搜索,我无法理清为什么我一直收到这个错误.最初我把double rosenbrock = (1-x)**2+100*(y-x**2)**2;
它分成了声明和作业,但这并没有解决它.我确信问题应该是微不足道的.
public double objFunction(double input1, double input2){
double x = input1;
double y = input2;
double rosenbrock = 0;
rosenbrock = (1-x)**2+100*(y-x**2)**2;
return rosenbrock;
}
Run Code Online (Sandbox Code Playgroud)
编辑:是的,问题是在行,rosenbrock = (1-x)**2+100*(y-x**2)**2;
我很抱歉,我之前没有明确提到过.错误消息没有指定问题的根源,因此我对可能导致它的原因感到困惑.
我创建了一个变量,
newval1 = lb + (ub - lb)*rnd.nextDouble();
Run Code Online (Sandbox Code Playgroud)
它必须位于两个值之间,bounds[0]
并且bounds[1]
.目前,我使用三元运算符在两行中实现了此检查:
newval1 = ((newval1<bounds[0]) ? bounds[0] : newval1);
newval1 = ((newval1>bounds[1]) ? bounds[1] : newval1);
Run Code Online (Sandbox Code Playgroud)
我毫不怀疑有一种比newval1
这些界限更有效的方法,最好是一行.有什么建议?
我用循环解决了一个问题,但它既慢又非pythonic。我正在寻找面膜解决方案。如果我对具有特定通道值的像素感兴趣,那将很简单:
img[img[:,:,0]==64] = [0,0,0]
Run Code Online (Sandbox Code Playgroud)
把它们全部变黑。我想更改特定颜色,例如[192,0,128]
,所以我需要所有三个通道,例如img[ img[:,:,0]==192 and img[:,:,1]==0 and img[:,:,2]==128]=[0,0,0]
但当然这是错误的。我也尝试过,np.all(img==[192,0,128])
但它也不起作用。
我看到了这个解决方案,但是并不能完全回答我的问题。它也很老,所以我不确定它的相关性。
我不断收到有关GPU单位顺序的冲突输出。其中有两个:Tesla K40和NVS315(从未使用过的传统设备)。当我跑步时deviceQuery
,我得到
Device 0: "Tesla K40m"
...
Device PCI Domain ID / Bus ID / location ID: 0 / 4 / 0
Device 1: "NVS 315"
...
Device PCI Domain ID / Bus ID / location ID: 0 / 3 / 0
Run Code Online (Sandbox Code Playgroud)
另一方面,nvidia-smi
产生不同的顺序:
0 NVS 315
1 Tesla K40m
Run Code Online (Sandbox Code Playgroud)
我觉得很困惑。我为Tensorflow(以及Pytorch的类似解决方案)找到的解决方案是使用
import os
os.environ["CUDA_DEVICE_ORDER"]="PCI_BUS_ID"
os.environ["CUDA_VISIBLE_DEVICES"]="0"
Run Code Online (Sandbox Code Playgroud)
Tesla的PCI总线ID为4,NVS的PCI总线ID为3,因此应将其设置为3(NVS),对吗?
在火炬我设置
os.environ['CUDA_VISIBLE_DEVICES']='0'
...
device = torch.cuda.device(0)
print torch.cuda.get_device_name(0)
Run Code Online (Sandbox Code Playgroud)
要得到 Tesla K40m
当我改为
os.environ['CUDA_VISIBLE_DEVICES']='1'
device = torch.cuda.device(1)
print torch.cuda.get_device_name(0) …
Run Code Online (Sandbox Code Playgroud) java ×9
swing ×6
jpanel ×5
awt ×3
image ×2
python ×2
scikit-image ×2
coding-style ×1
cuda ×1
graphics ×1
jframe ×1
mouseevent ×1
object ×1
pytorch ×1
rgb ×1
tensorflow ×1
tkinter ×1