Java 从JDialog调用JDialog

Java 从JDialog调用JDialog,java,swing,jdialog,Java,Swing,Jdialog,我正在尝试构建一个应用程序,其中允许从JDialog调用JDialog。我试过了,但在A的调用对话框B时,出现了B对话框,然后立即消失。这些问题有解决办法吗 我的代码: 我有一个扩展了javax.swing.JDialog的类a。然后有一个标签,它具有从classpad和zoom调用对话框的操作,如下所示: private void lblSuratRekomendasiMouseClicked(java.awt.event.MouseEvent evt) { try {

我正在尝试构建一个应用程序,其中允许从
JDialog
调用
JDialog
。我试过了,但在A的调用对话框B时,出现了B对话框,然后立即消失。这些问题有解决办法吗

我的代码:

我有一个扩展了javax.swing.JDialog的类a。然后有一个标签,它具有从class
pad和zoom
调用对话框的操作,如下所示:

 private void lblSuratRekomendasiMouseClicked(java.awt.event.MouseEvent evt) {
    try {
        PadAndZoom app = new PadAndZoom();

        BufferedImage img = ImageIO.read(PadAndZoom.class.getResource("/tampilan/background5.jpg"));

        app.tes(img);
    } catch (IOException ex) {
        Logger.getLogger(RincianBukuBesar.class.getName()).log(Level.SEVERE, null, ex);
    }
} 
然后我还有一个类要被类A的方法
lblSuratRekomendasiMouseClicked
java.awt.event.MouseEvent evt
)调用

package dispertasih;

import java.awt.*;  
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import java.awt.geom.*;  
import java.awt.image.BufferedImage;  
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.imageio.ImageIO;
import javax.swing.*;  
import javax.swing.event.*;  


public class PadAndZoom implements ChangeListener {  
    BufferedImage image;  
    PanPanelX label;  


    public void stateChanged(ChangeEvent e) {  
        int value = ((JSlider) e.getSource()).getValue();
        double scale = value / 200.0;
        BufferedImage scaled = getScaledImage(scale);
        label.setImage(scaled);
    }  


    public BufferedImage getScaledImage(double scale) {  
        int w = (int)(scale*image.getWidth());  
        int h = (int)(scale*image.getHeight());  
        BufferedImage bi = new BufferedImage(w, h, image.getType());  
        Graphics2D g2 = bi.createGraphics();  
        g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION,  
                            RenderingHints.VALUE_INTERPOLATION_BICUBIC);  
        AffineTransform at = AffineTransform.getScaleInstance(scale, scale);  
        g2.drawRenderedImage(image, at);  
        g2.dispose();  
        return bi;  
    }  

    public PanPanelX getContent() {  
       // createAnImage();  
        label = new PanPanelX(image);  
        //label.setHorizontalAlignment(JLabel.CENTER);  
        return label;  
    }  

    public void createAnImage(BufferedImage imgbuf) {  
        int w = 500;  
        int h = 500;  
        int type = BufferedImage.TYPE_INT_RGB; // many options  

            image = imgbuf;


    }  

    public JSlider getControl() {  
        JSlider slider = new JSlider(JSlider.HORIZONTAL, 50, 200, 50);  
        slider.setMajorTickSpacing(50);  
        slider.setMinorTickSpacing(10);  
        slider.setPaintTicks(true);  
        slider.setPaintLabels(true);  
        slider.addChangeListener(this);  
        return slider;          
    }  

    public void tes(BufferedImage img) {  
        PadAndZoom app = new PadAndZoom();  
        JDialog f = new JDialog();  
        JButton b = new JButton();
          try {
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
    } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException e) { }


             app.createAnImage(img);


        f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);  
        f.getContentPane().add(new JScrollPane(app.getContent()));  

        //f.getContentPane().add(new JButton("tessss"));
        f.getContentPane().add(app.getControl(), "Last");  
        f.setSize(400, 400);  
        f.setLocation(200,200);  
        f.setVisible(true);  
    }  
}  
class PanPanelX extends JPanel {

public int x, y;
public int width = 800, height = 800;
BufferedImage img;
public final static RenderingHints textRenderHints = new      RenderingHints(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
public final static RenderingHints imageRenderHints = new RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
public final static RenderingHints renderHints = new RenderingHints(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
static int startX, startY;
 public void setImage(BufferedImage img) {
        this.img = img;
        revalidate();
        repaint();
    }
public PanPanelX(BufferedImage img) {
    x = 20;
    y = 20;
    this.img = img;

    addMouseListener(new MouseAdapter() {
        @Override
        public void mousePressed(MouseEvent me) {
            super.mousePressed(me);
            startX = me.getX();
            startY = me.getY();
        }
    });

    addMouseMotionListener(new MouseMotionAdapter() {
        @Override
        public void mouseDragged(MouseEvent me) {
            super.mouseDragged(me);

            if (me.getX() < startX) {//moving image to right
                x -= 2;
            } else if (me.getX() > startX) {//moving image to left
                x += 2;
            }

            if (me.getY() < startY) {//moving image up
                y -= 2;
            } else if (me.getY() > startY) {//moving image to down
                y += 2;
            }
            repaint();
        }
    });
}

@Override
protected void paintComponent(Graphics grphcs) {
    super.paintComponent(grphcs);
    Graphics2D g2d = (Graphics2D) grphcs;

    //turn on some nice effects
    applyRenderHints(g2d);

    g2d.drawImage(img, x, y, null);
}

@Override
public Dimension getPreferredSize() {
    return new Dimension(width, height);
}

public static void applyRenderHints(Graphics2D g2d) {
    g2d.setRenderingHints(textRenderHints);
    g2d.setRenderingHints(imageRenderHints);
    g2d.setRenderingHints(renderHints);
}
}
package-dispertasih;
导入java.awt.*;
导入java.awt.event.MouseAdapter;
导入java.awt.event.MouseEvent;
导入java.awt.event.MouseMotionAdapter;
导入java.awt.geom.*;
导入java.awt.image.buffereImage;
导入java.io.IOException;
导入java.util.logging.Level;
导入java.util.logging.Logger;
导入javax.imageio.imageio;
导入javax.swing.*;
导入javax.swing.event.*;
公共类PadAndZoom实现ChangeListener{
缓冲图像;
panelx标签;
公共无效状态已更改(更改事件e){
int value=((JSlider)e.getSource()).getValue();
双刻度=数值/200.0;
BuffereImage scaled=GetScaleImage(缩放);
标签。设置图像(缩放);
}  
公共缓冲区映像GetScaleImage(双刻度){
intw=(int)(scale*image.getWidth());
inth=(int)(scale*image.getHeight());
BuffereImage bi=新的BuffereImage(w,h,image.getType());
Graphics2D g2=bi.createGraphics();
g2.setRenderingHint(RenderingHints.KEY_插值,
渲染提示值(插值双三次);
AffineTransform at=AffineTransform.getScaleInstance(缩放,缩放);
g2.DrawRenderImage(图像,at);
g2.dispose();
返回bi;
}  
公共PanPanelX getContent(){
//createAnImage();
标签=新的PanPanelX(图像);
//标签设置水平对齐(JLabel.CENTER);
退货标签;
}  
public void createAnImage(buffereImage imgbuf){
int w=500;
int h=500;
int type=BufferedImage.type\u int\u RGB;//许多选项
图像=imgbuf;
}  
公共JSlider getControl(){
JSlider滑块=新的JSlider(JSlider.HORIZONTAL,50200,50);
滑块。设置主轨迹间距(50);
滑块。设置MinortickSpacing(10);
slider.setPaintTicks(真);
slider.setPaintLabels(true);
slider.addChangeListener(this);
返回滑块;
}  
公共无效tes(BuffereImage img){
PadAndZoom应用程序=新建PadAndZoom();
JDialog f=newjdialog();
JButton b=新JButton();
试一试{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}catch(ClassNotFoundException |实例化Exception | IllegalacessException |不受支持的LookandFeelException e){}
应用程序createAnImage(img);
f、 setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
f、 getContentPane().add(新的JScrollPane(app.getContent());
//f、 getContentPane().add(新的JButton(“tesss”);
f、 getContentPane().add(app.getControl(),“Last”);
f、 设置大小(400400);
f、 设定位置(200200);
f、 setVisible(真);
}  
}  
类PanPanelX扩展了JPanel{
公共整数x,y;
公共内部宽度=800,高度=800;
缓冲图像img;
public final static RenderingHints textRenderHints=新的RenderingHints(RenderingHints.KEY\u TEXT\u ANTIALIAS,RenderingHints.VALUE\u TEXT\u ANTIALIAS\u ON);
public final static RenderingHints imagerrenderingts=新的RenderingHints(RenderingHints.KEY\u ANTIALIASING,RenderingHints.VALUE\u ANTIALIAS\u ON);
public final static RenderingHints renderHints=新的RenderingHints(RenderingHints.KEY\u RENDERING,RenderingHints.VALUE\u RENDER\u QUALITY);
静态int startX,startY;
公共无效设置映像(BuffereImage img){
this.img=img;
重新验证();
重新油漆();
}
公共PanPanelX(BuffereImage img){
x=20;
y=20;
this.img=img;
addMouseListener(新的MouseAdapter(){
@凌驾
public void mousePressed(MouseEvent me){
超级老鼠脸(我);
startX=me.getX();
startY=me.getY();
}
});
addMouseMotionListener(新的MouseMotionAdapter(){
@凌驾
公共无效鼠标标记(MouseEvent me){
超级。鼠标标记(我);
如果(me.getX()startX){//将图像移动到左侧,则为else
x+=2;
}
如果(me.getY()startY){//将图像向下移动
y+=2;
}
重新油漆();
}
});
}
@凌驾
受保护的组件(图形grphcs){
超级油漆组件(grphcs);
Graphics2D g2d=(Graphics2D)grphcs;
//打开一些不错的效果
applyRenderHints(g2d);
g2d.drawImage(img,x,y,null);
}
@凌驾
公共维度getPreferredSize(){
返回新尺寸(宽度、高度);
}
公共静态无效ApplyRenderInts(图形2D-g2d){
g2d.setRenderingHints(textRenderHints);
g2d.setRenderingHits(ImageRenderInts);
g2d.setRenderingHints(renderHints);
}
}

谢谢您。

如果您不显示代码,我不知道您希望我们知道您的问题是什么。这本身不是一个Swing问题,而是程序问题中的一个bug,解决方案是修复代码中没有显示的bug。如果您需要我们的帮助,您需要隔离错误,然后向我们显示相关代码。请注意,我们不希望看到您的所有代码,尤其是