这是一个程序,它获取一个链接并将其绘制在画布中...但是当它这样做时,窗口右侧的jcombobox停止工作,您必须选择它2次才能更改为所选的数字。我还看到,绘制和重新绘制方法非常不稳定,有时图像不会出现,或者如果它出现,当您最大化窗口时,它会再次消失。
package bigProgram;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.LayoutManager;
import java.awt.Rectangle;
import java.awt.Window;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ContainerListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.KeyListener;
import java.awt.image.BufferedImage;
import java.awt.image.ColorModel;
import java.awt.image.Raster;
import java.awt.image.RenderedImage;
import java.awt.image.SampleModel;
import java.awt.image.WritableRaster;
import java.io.IOException;
import java.net.URL;
import java.util.Vector;
import javax.imageio.ImageIO;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import java.awt.*;
public class First extends JFrame implements ActionListener,ItemListener
{
JButton test;
JTextField fill,fillout;
String web=null;
BufferedImage im;
JPanel cuadro=new JPanel();
Image out;
Container cont;
JComboBox<Integer> scale;
double mini;
int x,y;
int sh,sw;
String seleccionado;
Canvas space;
public First()
{
//ventana
setTitle("Image Scalerprinter");
setBounds(200,200,700,670);
setResizable(true);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
BorderLayout fer=new BorderLayout();
setLayout(fer);
//espacio para dibujar
space=new Canvas();
space.setVisible(false);
add(space,fer.CENTER);
//boton
test=new JButton("Test");
test.setPreferredSize(new Dimension(60, 40));
add(test,fer.WEST,0);
test.setActionCommand("T");
test.addActionListener(this);
//texto IN
fill=new JTextField();
fill.setPreferredSize(new Dimension(200,20));
add(fill,fer.NORTH,1);
//texto OUT
fillout=new JTextField();
fillout.setPreferredSize(new Dimension(200,20));
add(fillout,fer.SOUTH,2);
//opcion para escalarlo
scale=new JComboBox<Integer>();
scale.setPreferredSize(new Dimension(50,40));
for(int i=100;i>0;i--)
{
scale.addItem(i);
}
add(scale,fer.EAST);
scale.addItemListener(this);
setVisible(true);
}
///accion para cerrar
private void setDefaultCloseOperation(Object exit)
{
}
//metodo para borrar
public void clearRect()
{
repaint();
}
//accion del boton
@Override
public void actionPerformed(ActionEvent e)
{
if(e.getActionCommand().equals("T"))
{
if(fill.getText()!=null)
{
web=fill.getText();
try
{
URL r=new URL(web);
im =ImageIO.read(r);
System.out.println("yes");
out= im.getScaledInstance(500, 500, Image.SCALE_SMOOTH);
space.repaint();
}
catch (IOException e1)
{
e1.printStackTrace();
}
}
}
}
//aacion para el scale
public void itemStateChanged(ItemEvent e) {
if (e.getSource()==scale)
{
mini=(int) e.getItem();//esta funcionando!
double size=mini/100;
scale.setName(getName());
double sh= out.getHeight(null)*size;
sw=(int) (out.getWidth(null)*size);
System.out.println("real size:"+out.getHeight(null)+" height\n "+
out.getWidth(null)+" width "+"new: "+sh+" and "+sw);
out.getScaledInstance(sw, (int) sh,Image.SCALE_FAST);
repaint();
setVisible(true);
}
}
//metodo para pintar cosas
public void paint (Graphics g)
{
x=100;
y=100;
g.drawImage(out, x,y,null);
}
public static void main(String[] args)
{
First one=new First();
//"http://www.downtoearthservices.co.uk/resources/tree2.gif" this is the link to paste in the jtextfield
}
mini = (int) e.getItem();//esta funcionando!
导致编译错误:
inconvertible types: required: int found: java.lang.Object
不要试图运行编译不正确的源代码。这将导致不可预测的行为。
这确实可以干净地编译:
mini = (Integer)(e.getItem());//esta funcionando!
>
你不调用super.paint(g)
会打破油漆链,这会给你留下油漆伪影。
同样,您不应该在像JFrame
这样的顶级容器上绘制,因为它们不是双缓冲的,并且它们已经在组件中承载了绘制的负载。相反,在JGroup
或JComponent
上绘制并覆盖油漆组件
并调用super.paintComponent()
。
public class First extends JPanel ... {
...
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
x = 100;
y = 100;
g.drawImage(out, x, y, null);
}
...
}
在< code>JPanel上绘制painting时,您应该覆盖< code>getPreferredSize()并只< code>pack()框架容器。
@Override
public Dimension getPreferredSize() {
return new Dimension(700, 670);
}
从事件调度线程运行 Swing 应用
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable(){
public void run() {
First one = new First();
JFrame frame = new JFrame("Frame");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(one);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
所以我正在尝试绘制一个棋盘(当前代码与棋盘无关,因为我正在尝试调试我的问题),并且我遇到了一个有趣的pyGames问题。 如你所见,红色背景和圆圈就在那里,它们只是看不见,除非我把窗口拖出屏幕。 我不认为这是一个pygame的问题,因为我已经用类似的代码构建了一个实际功能的程序。如果这有所帮助的话,我正在使用PyCharm的Windows 10笔记本电脑上。 谢谢你!
这可能是一个骗局——我找不到它——我基本上只是试图通过提供我自己的ListCellRenler来自定义JComboBox显示: 当我展开JComboBox列表时,组件会正确显示名称。但是,在选择项目时,显示将恢复为myObj的toString()值。 我错过什么了吗?
我一直在探索回收站视图和Cardview,我偶然发现了一个问题,我不知道如何处理它。我的回收站视图工作正常,但是当我点击回收站视图的项目背景改变颜色时,它的行为很奇怪。 好的,回收器视图正常加载,但是当我第一次单击一个项目时,项目背景颜色会闪烁其新颜色,但会保持其默认颜色。当我第二次单击任何项目时,只有在回收器视图的项目更改其背景颜色时,它应该与单击的项目的其余部分一起更改。 从日志中。d我在代码
普雷斯塔霍普:1.7。6.2我希望在类别中的backoffice中使用select2,但未添加jQuery,并且select2不工作。我用钩子: 错误消息:jQuery。fn。选择2。默认值。集合不是一个函数
Java的包管理系统对我来说总是简单有效。JDK本身大量使用它。我们一直在使用它来模拟名称空间和模块的概念。 Jigsaw项目(又名Java平台模块系统)试图填写什么内容? 从官方网站: 本项目的目标是为Java SE平台设计和实现一个标准模块系统,并将该系统应用于平台本身和JDK。
问题内容: 我有一个显示来自数据库Patient_Details的名称的JComboBox 这是来自comboitem类,该类仅返回名称,而不返回id 我的问题是如何获取选定的项目,以便可以执行此操作,我不知道如何执行此操作,我已经尝试了所有代码约2小时,将不胜感激 NB我是Java初学者 问题答案: 只需在组合框中添加一个即可。当被调用时,你可以看一下所选择的价值和呼叫你需要什么都的方法。 例如