Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么在绘制图像后,jcombobox仅在选择其项目2次后才响应?_Java_Swing_Awt_Paint_Jcombobox - Fatal编程技术网

Java 为什么在绘制图像后,jcombobox仅在选择其项目2次后才响应?

Java 为什么在绘制图像后,jcombobox仅在选择其项目2次后才响应?,java,swing,awt,paint,jcombobox,Java,Swing,Awt,Paint,Jcombobox,这是一个程序,它获取一个链接并在画布上绘制它……但是当它停止工作时,窗口右侧的jcombobox必须选择它2次才能更改为所选的数字。此外,我还看到绘制和重新绘制方法非常不稳定,有时图像不会出现,或者如果出现,当你最大化窗口时,图像会再次消失 package bigProgram; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Component; import java.awt.Containe

这是一个程序,它获取一个链接并在画布上绘制它……但是当它停止工作时,窗口右侧的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


        }
package程序;
导入java.awt.BorderLayout;
导入java.awt.Color;
导入java.awt.Component;
导入java.awt.Container;
导入java.awt.Dimension;
导入java.awt.FlowLayout;
导入java.awt.Graphics;
导入java.awt.Image;
导入java.awt.LayoutManager;
导入java.awt.Rectangle;
导入java.awt.Window;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入java.awt.event.ContainerListener;
导入java.awt.event.ItemEvent;
导入java.awt.event.ItemListener;
导入java.awt.event.KeyListener;
导入java.awt.image.buffereImage;
导入java.awt.image.ColorModel;
导入java.awt.image.graster;
导入java.awt.image.renderImage;
导入java.awt.image.SampleModel;
导入java.awt.image.WritableRaster;
导入java.io.IOException;
导入java.net.URL;
导入java.util.Vector;
导入javax.imageio.imageio;
导入javax.swing.JButton;
导入javax.swing.JComboBox;
导入javax.swing.JComponent;
导入javax.swing.JFrame;
导入javax.swing.JPanel;
导入javax.swing.JTextField;
导入java.awt.*;
公共类首先扩展JFrame实现ActionListener、ItemListener
{
JButton试验;
JTextField填充,fillout;
字符串web=null;
缓冲图像im;
JPanel cuadro=新的JPanel();
图像输出;
集装箱运输;
JComboBox量表;
双迷你;
int x,y;
内西,西南;;
字符串选择;
画布空间;
公共优先
{
//文塔纳
setTitle(“图像缩放打印机”);
挫折(200700670);
可设置大小(真);
此.setDefaultCloseOperation(关闭时退出);
BorderLayout fer=新的BorderLayout();
设置布局(fer);
//埃斯帕西奥帕拉迪布贾尔酒店
空格=新画布();
space.setVisible(false);
添加(空间,相对中心);
//波顿
测试=新按钮(“测试”);
测试。设置首选尺寸(新尺寸(60,40));
添加(测试,西弗,0);
test.setActionCommand(“T”);
test.addActionListener(this);
//文本输入
fill=新的JTextField();
填充。设置首选尺寸(新尺寸(200,20));
添加(填充,北向,1);
//发短信
fillout=新的JTextField();
fillout.setPreferredSize(新尺寸(200,20));
增加(填写,南部,2);
//埃斯卡拉罗医院
scale=新的JComboBox();
比例。设置首选尺寸(新尺寸(50,40));
对于(int i=100;i>0;i--)
{
比例尺.增补项(i);
}
添加(比例,参考东部);
scale.addItemListener(此);
setVisible(真);
}
///塞拉公寓
私有void setDefaultCloseOperation(对象退出)
{
}
//梅托帕拉博拉尔酒店
public void clearRect()
{
重新油漆();
}
//波顿公寓
@凌驾
已执行的公共无效操作(操作事件e)
{
如果(例如getActionCommand().equals(“T”))
{
if(fill.getText()!=null)
{
web=fill.getText();
尝试
{
URL r=新的URL(web);
im=图像读取(r);
System.out.println(“是”);
out=im.getScaledInstance(500500,Image.SCALE\u平滑);
space.repaint();
}
捕获(IOE1异常)
{
e1.printStackTrace();
}
}
}
}
//阿西翁帕拉埃尔量表
公共无效itemStateChanged(ItemEvent e){
如果(例如getSource()==比例)
{   
mini=(int)e.getItem();//esta functionAndo!
双倍尺寸=迷你/100;
scale.setName(getName());
double sh=out.getHeight(null)*大小;
sw=(int)(out.getWidth(null)*大小);
System.out.println(“实际大小:“+out.getHeight(null)+”height\n”+
out.getWidth(null)+“width”+“new:“+sh+”和“+sw”);
out.getScaledInstance(sw,(int)sh,Image.SCALE\u FAST);
重新油漆();
setVisible(真);
}
}
//美托多帕拉品塔尔美容院
公共空间涂料(图g)
{
x=100;
y=100;
g、 drawImage(输出、x、y、空);
}
公共静态void main(字符串[]args)
{
第一个=新的第一个();
//"http://www.downtoearthservices.co.uk/resources/tree2.gif“这是要粘贴到jtextfield中的链接
}
  • 如果不调用
    super.paint(g)
    ,将导致绘制工件,这将破坏绘制链

  • 同样,您不应该在顶级容器(如
    JFrame
    )上进行绘制,因为它们不是双缓冲的,并且它们已经在组件中承载了绘制的负载。相反,在
    JPanel
    JComponent
    上进行绘制,并重写
    paintComponent
    并调用
    super.paintComponent()

  • 当在
    JPanel
    上绘制时,您应该覆盖
    getPreferredSize()
    并只
    pack()
    框架容器

    @Override 
    public Dimension getPreferredSize() {
        return new Dimension(700, 670);
    }
    
  • 从中运行Swing应用程序

  • 如果不调用
    super.paint(g)
    ,将导致绘制工件,这将破坏绘制链

  • 同样,您不应该在像
    JFrame
    这样的顶级容器上进行绘制,因为它们不是双缓冲的,而且
    @Override 
    public Dimension getPreferredSize() {
        return new Dimension(700, 670);
    }
    
    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);
            }
        });
    }
    
    mini = (int) e.getItem();//esta funcionando!
    
    inconvertible types:  required: int   found: java.lang.Object
    
    mini = (Integer)(e.getItem());//esta funcionando!