1

//编辑:我编辑的问题,因为我不想在这里搞砸;)你好。这是我遇到问题的 2 节课。在程序中,子类打开和显示图像的类运行良好,但是当我将一些代码分配给两个类时它不起作用(在 JPanel 中显示图像)。我知道那太多了,但是没有办法;]

public class przegladarka_3 {

public static void main(String[] args){
   uklad_gl okno_gl=new uklad_gl(true,800,600,"Przeglądarka plików graficznych 1.0 alfa");
   okno_gl.setResizable(false);
   okno_gl.setLocationRelativeTo(okno_gl);   
   okno_gl.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}


class uklad_gl extends JFrame{

JPanel rozklad=new JPanel(); 
JPanel rozklad2;
JScrollPane zwijanie; //panel dla suwaków
JMenuBar pasek_meni; 
JMenuItem wybor;
JMenu[] pdp; //Plik Dodaj Pomoc

String[] tab_pasek;
String[] tab1; //wybory dla Plik
String[] tab2; //Dodaj
String[] tab3; //Pomoc

JFileChooser otworz,zapisz_jako;
ActionListener wykonaj_plik=new uklad_gl.klasa_zadan();
ActionListener wykonaj_dzialanie=new uklad_gl.klasa_zadan();
ActionListener wykonaj_pomoc=new uklad_gl.klasa_zadan();


public uklad_gl(boolean b, int wys, int szer, String tytul){  
setVisible(b);
setSize(wys, szer);
setTitle(tytul);


rozklad2=new JPanel(new BorderLayout());
add(rozklad,BorderLayout.PAGE_END);
add(rozklad2,BorderLayout.LINE_END);

zwijanie=new JScrollPane(rozklad);

pasek_postepu=new JProgressBar(1,100);
pasek_postepu.setValue(0);
pasek_postepu.setStringPainted(true);
pasek_postepu.setBounds(600, 200, 110,500);

stworz_caly_pasek_meni("Plik,Dodaj,Pomoc");  

} 



public void stworz_caly_pasek_meni(String lista_pasek){

tab_pasek=lista_pasek.split(",");
pasek_meni=new JMenuBar();
pdp=new JMenu[tab_pasek.length];
rozklad.add(pasek_meni);
setJMenuBar(pasek_meni);

for(int i=0;i<tab_pasek.length;i++){

        pdp[i]=new JMenu(tab_pasek[i]);
        setJMenuBar(pasek_meni);
        pasek_meni.add(pdp[i]);

        if(i==0) stworz_Plik("Otwórz,Zapisz,Zapisz jako...,Zamknij",wykonaj_plik);
        else if(i==1) stworz_Dzialanie("Odcienie szarości,Sepia,Negatyw,Nasycenie barw",wykonaj_dzialanie);
        else  stworz_Pomoc("O mnie, O programie, Najczęściej zadawane pytania",wykonaj_pomoc);

    } 
    }

public void stworz_Plik(String lista_Plik,ActionListener e){

tab1=lista_Plik.split(",");

for(int i=0;i<tab1.length;i++){

        wybor=new JMenuItem(tab1[i]);
        pdp[0].add(wybor);
        wybor.addActionListener(e);

   } 
  }

 public void stworz_Dzialanie(String lista_Dodaj,ActionListener e){

 tab2=lista_Dodaj.split(",");

 for(int i=0;i<tab2.length;i++){

        wybor=new JMenuItem(tab2[i]);
        pdp[1].add(wybor);
        wybor.addActionListener(e);

   }
  }

public void stworz_Pomoc(String lista_Pomoc,ActionListener e){

tab3=lista_Pomoc.split(",");

for(int i=0;i<tab3.length;i++){

        wybor=new JMenuItem(tab3[i]);
        pdp[2].add(wybor);
        wybor.addActionListener(e);

   }
  }

   public class klasa_zadan implements ActionListener,WindowListener,ComponentListener,MouseListener{
  BufferedImage obraz;


  public void actionPerformed(ActionEvent e){
  String polecenie=e.getActionCommand();

  if(polecenie.equals("Otwórz")) try {
    otworz();
} catch (IOException ex) {
    Logger.getLogger(uklad_gl.class.getName()).log(Level.SEVERE, null, ex);
}


        }  

public void otworz() throws IOException{
  otworz=new JFileChooser("C://");
  FileNameExtensionFilter rastrowa=new FileNameExtensionFilter("Pliki grafiki rastrowej(.jpeg,.png.,gif...)", "jpeg","jpg", "gif","png","bmp");

  otworz.setFileFilter(rastrowa);

  int a=otworz.showOpenDialog(null);

  if(a==JFileChooser.APPROVE_OPTION){
  String nazwa_pliku=otworz.getSelectedFile().getAbsolutePath();
  String roz=nazwa_pliku.substring(nazwa_pliku.lastIndexOf('.')+1);

  obraz=ImageIO.read(otworz.getSelectedFile());         
  rozklad=new JPanel(){

     protected void paintComponent(Graphics g){
            Graphics g2 = g.create();
            g2.drawImage(obraz, 0, 0, getWidth(), getHeight(), null);
            g2.dispose();             
        }         
 };   
 add(rozklad);
 revalidate();  
 repaint();   
 }
 }  
 }
 }

** * ** * ***新课程* ** * ** * *

public class klasa_zadan extends JFrame implements ActionListener,WindowListener,ComponentListener,MouseListener{

BufferedImage obraz;

JFileChooser otworz,zapisz_jako;

public void actionPerformed(ActionEvent e){
    try {
        String polecenie=e.getActionCommand();

        if(polecenie.equals("Otwórz"))
            otworz();

        if(polecenie.equals("Zapisz jako...")) zapisz_jako();

        if(polecenie.equals("Zamknij")) zamknij();
    } catch (IOException ex) {
        Logger.getLogger(zadania_plik.class.getName()).log(Level.SEVERE, null, ex);
    }
}  

public void otworz() throws IOException{
  otworz=new JFileChooser("C://");

  FileNameExtensionFilter rastrowa=new FileNameExtensionFilter("Pliki grafiki rastrowej(.jpeg,.png.,gif...)", "jpeg","jpg", "gif","png","bmp");
  otworz.setFileFilter(rastrowa);
  int a=otworz.showOpenDialog(null);

  if(a==JFileChooser.APPROVE_OPTION){
  String nazwa_pliku=otworz.getSelectedFile().getAbsolutePath();
 // String roz=nazwa_pliku.substring(nazwa_pliku.lastIndexOf('.')+1);

  final BufferedImage obraz=ImageIO.read(otworz.getSelectedFile()); 
  final JPanel rozklad=new JPanel(new BorderLayout()){
     protected void paintComponent(Graphics g){
           Graphics g2 = (Graphics2D)g;
           g2.drawImage(obraz, 0, 0,this);
           //g2.dispose();             
        }         
 };  
 Dimension rozmiar=new Dimension(obraz.getWidth(),obraz.getHeight()); 
 add(rozklad);
 revalidate();  
 repaint();   
 }
 }  

 public void zapisz() throws IOException{  
     File plik=zapisz_jako.getSelectedFile();
     String nazwa_pliku=plik.getAbsolutePath();
     String roz=null;
     roz=nazwa_pliku.substring(nazwa_pliku.lastIndexOf(".")+1); 
     ImageIO.write(obraz, roz, plik);         //niewiadomo, czy ta metoda działa!!!!                 
  } 


 public void zapisz_jako(){ //zapisanie pliku do innego formatu jest uzależnione od rodzaju pliku graficznego
 zapisz_jako=new JFileChooser("C://");
 zapisz_jako.setSelectedFile(new File("beznazwy.jpg")); //tworzy plik, który będzie zapisany z domyślną nazwą
 zapisz_jako.setFileSelectionMode(JFileChooser.FILES_ONLY);

 FileNameExtensionFilter rastrowa=new FileNameExtensionFilter("Pliki grafiki rastrowej(.jpeg,.png.,gif...)", "jpeg","jpg", "gif","png","bmp");
 zapisz_jako.setFileFilter(rastrowa);

 int a=zapisz_jako.showSaveDialog(null);

 if(a==JFileChooser.APPROVE_OPTION){  
     File plik=zapisz_jako.getSelectedFile();
     String nazwa_pliku=plik.getAbsolutePath();
     String roz=null;

     if(nazwa_pliku.indexOf(".jpg")==-1 && nazwa_pliku.indexOf(".png")==-1 && nazwa_pliku.indexOf(".gif")==-1){       
         nazwa_pliku+=".jpg"; //zostaw jpg jako domyślny
         roz="jpg";
         plik=new File(nazwa_pliku);      
     }

     else{          
         roz=nazwa_pliku.substring(nazwa_pliku.lastIndexOf(".")+1);            
         try {                
             ImageIO.write(obraz, roz, plik);                
         } catch (IOException ex) {        
             Logger.getLogger(zadania_plik.class.getName()).log(Level.SEVERE, null, ex);  
         }
     }  
 } 
 } 

public void zamknij(){
int tn=JOptionPane.showConfirmDialog(null, 
        "Czy na pewno chcesz zakończyć działanie z programem?","Widaomość",
            JOptionPane.YES_NO_OPTION,0,null);

if(tn==0) System.exit(0);       
} 
}

==================================================== ====

public class uklad_gl extends JFrame{

JPanel rozklad;
JScrollPane zwijanie; //panel dla suwaków

JMenuBar pasek_meni; 
JMenuItem wybor;
JMenu[] pdp; //Plik Dodaj Pomoc

JScrollPane suwak1,suwak2;
JProgressBar pasek_postepu;

String[] tab_pasek;
String[] tab1; //wybory dla Plik
String[] tab2; //Dodaj
String[] tab3; //Pomoc

JFileChooser otworz,zapisz_jako;
ActionListener wykonaj_plik=new zadania_plik();
ActionListener wykonaj_dzialanie=new zadania_dodaj();
ActionListener wykonaj_pomoc=new zadania_pomoc();

public uklad_gl(boolean b, int wys, int szer, String tytul){  
setVisible(b);
setSize(wys, szer);
setTitle(tytul);

rozklad=new JPanel(new BorderLayout());

zwijanie=new JScrollPane(rozklad);

stworz_caly_pasek_meni("Plik,Dodaj,Pomoc");  
stworz_suwaki(wykonaj_plik);

} 

public void stworz_suwaki(ActionListener e){
//jeszcze nie działają
suwak1=new JScrollPane();
suwak2=new JScrollPane();
rozklad.add(suwak1);
rozklad.add(suwak2);   

}

public void stworz_caly_pasek_meni(String lista_pasek){   
tab_pasek=lista_pasek.split(",");
pasek_meni=new JMenuBar();
pdp=new JMenu[tab_pasek.length];
rozklad.add(pasek_meni);
setJMenuBar(pasek_meni);

for(int i=0;i<tab_pasek.length;i++){

        pdp[i]=new JMenu(tab_pasek[i]);
        setJMenuBar(pasek_meni);
        pasek_meni.add(pdp[i]);

        if(i==0) stworz_Plik("Otwórz,Zapisz,Zapisz jako...,Zamknij",wykonaj_plik);
        else if(i==1) stworz_Dzialanie("Odcienie szarości,Sepia,Negatyw,Nasycenie barw",wykonaj_dzialanie);
        else  stworz_Pomoc("O mnie, O programie, Najczęściej zadawane pytania",wykonaj_pomoc);      
  } 
  }

public void stworz_Plik(String lista_Plik,ActionListener e){
tab1=lista_Plik.split(",");

for(int i=0;i<tab1.length;i++){
        wybor=new JMenuItem(tab1[i]);
        pdp[0].add(wybor);
        wybor.addActionListener(e);        
   } 
   }

public void stworz_Dzialanie(String lista_Dodaj,ActionListener e){
tab2=lista_Dodaj.split(",");

for(int i=0;i<tab2.length;i++){   
        wybor=new JMenuItem(tab2[i]);
        pdp[1].add(wybor);

   }
   }

public void stworz_Pomoc(String lista_Pomoc,ActionListener e){
tab3=lista_Pomoc.split(",");

for(int i=0;i<tab3.length;i++){
        wybor=new JMenuItem(tab3[i]);
        pdp[2].add(wybor);
        wybor.addActionListener(e);     
   }
   }  
   }
4

1 回答 1

0

Several small issues. I think it is invokeLater.

I gave the panel a preferred size.

Assuming that the component class (JFrame?) has a BorderLayout, I picked another add.

public void otworz() throws IOException {
    JFileChooser otworz = new JFileChooser("C:/"); // Or "C:\\"

    FileNameExtensionFilter rastrowa = new FileNameExtensionFilter("Pliki grafikirastrowej(.jpeg,.png.,gif...)", "jpeg", "jpg", "gif", "png", "bmp");
    otworz.setFileFilter(rastrowa);
    int a = otworz.showOpenDialog(null);
    if (a == JFileChooser.APPROVE_OPTION) {
        String nazwa_pliku = otworz.getSelectedFile().getAbsolutePath();
        //String roz = nazwa_pliku.substring(nazwa_pliku.lastIndexOf('.') + 1);

        final BufferedImage obraz = ImageIO.read(otworz.getSelectedFile());
        final JPanel rozklad = new JPanel(new BorderLayout()) {
            @Override
            protected void paintComponent(Graphics g) {
                Graphics g2 = (Graphics2D)g; //g.create();
                g2.drawImage(obraz, 0, 0, this);
                //g2.dispose();
            }
        };
        Dimension size = new Dimension(obraz.getWidth(), obraz.getHeight());
        rozklad.setPreferredSize(size);
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                add(rozklad, BorderLayout.CENTER);
                revalidate();
                repaint();
            }
        });
    }
}

P.S. you could use a JLabel too; that is simpler.

               add(new JLabel(new ImageIcon(obraz)), BorderLayout.CENTER);

After your EDIT

I tried to use all classes. I had to make some corrections. obraz for instance was declared both as field and as local variable, so that one hid the other. I used the NetBeans IDE and some warnings and correction proposals were given.

przegladarka_3

import javax.swing.JFrame;

public class przegladarka_3 {

    public static void main(String[] args) {
        uklad_gl okno_gl = new uklad_gl(true, 800, 600, "Przeglądarka plików graficznych 1.0 alfa");
        okno_gl.setResizable(false);
        okno_gl.setLocationRelativeTo(okno_gl);
        okno_gl.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}

uklad_gl

import java.awt.BorderLayout;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
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.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.filechooser.FileNameExtensionFilter;

class uklad_gl extends JFrame {

    JPanel rozklad = new JPanel();
    JPanel rozklad2;
    JScrollPane zwijanie; //panel dla suwaków
    JMenuBar pasek_meni;
    JMenuItem wybor;
    JMenu[] pdp; //Plik Dodaj Pomoc
    String[] tab_pasek;
    String[] tab1; //wybory dla Plik
    String[] tab2; //Dodaj
    String[] tab3; //Pomoc
    JFileChooser otworz, zapisz_jako;
    ActionListener wykonaj_plik = new uklad_gl.klasa_zadan();
    ActionListener wykonaj_dzialanie = new uklad_gl.klasa_zadan();
    ActionListener wykonaj_pomoc = new uklad_gl.klasa_zadan();

    public uklad_gl(boolean b, int wys, int szer, String tytul) {
        setVisible(b);
        setSize(wys, szer);
        setTitle(tytul);


        rozklad2 = new JPanel(new BorderLayout());
        add(rozklad, BorderLayout.PAGE_END);
        add(rozklad2, BorderLayout.LINE_END);

        zwijanie = new JScrollPane(rozklad);

//        pasek_postepu = new JProgressBar(1, 100);
//        pasek_postepu.setValue(0);
//        pasek_postepu.setStringPainted(true);
//        pasek_postepu.setBounds(600, 200, 110, 500);

        stworz_caly_pasek_meni("Plik,Dodaj,Pomoc");

    }

    public final void stworz_caly_pasek_meni(String lista_pasek) {

        tab_pasek = lista_pasek.split(",");
        pasek_meni = new JMenuBar();
        pdp = new JMenu[tab_pasek.length];
        rozklad.add(pasek_meni);
        setJMenuBar(pasek_meni);

        for (int i = 0; i < tab_pasek.length; i++) {

            pdp[i] = new JMenu(tab_pasek[i]);
            setJMenuBar(pasek_meni);
            pasek_meni.add(pdp[i]);

            if (i == 0) {
                stworz_Plik("Otwórz,Zapisz,Zapisz jako...,Zamknij", wykonaj_plik);
            } else if (i == 1) {
                stworz_Dzialanie("Odcienie szarości,Sepia,Negatyw,Nasycenie barw", wykonaj_dzialanie);
            } else {
                stworz_Pomoc("O mnie, O programie, Najczęściej zadawane pytania", wykonaj_pomoc);
            }

        }
    }

    public void stworz_Plik(String lista_Plik, ActionListener e) {

        tab1 = lista_Plik.split(",");

        for (int i = 0; i < tab1.length; i++) {

            wybor = new JMenuItem(tab1[i]);
            pdp[0].add(wybor);
            wybor.addActionListener(e);

        }
    }

    public void stworz_Dzialanie(String lista_Dodaj, ActionListener e) {

        tab2 = lista_Dodaj.split(",");

        for (int i = 0; i < tab2.length; i++) {

            wybor = new JMenuItem(tab2[i]);
            pdp[1].add(wybor);
            wybor.addActionListener(e);

        }
    }

    public void stworz_Pomoc(String lista_Pomoc, ActionListener e) {

        tab3 = lista_Pomoc.split(",");

        for (int i = 0; i < tab3.length; i++) {

            wybor = new JMenuItem(tab3[i]);
            pdp[2].add(wybor);
            wybor.addActionListener(e);

        }
    }

//    public class klasa_zadan implements ActionListener, WindowListener, ComponentListener, MouseListener {
    public class klasa_zadan implements ActionListener {

        BufferedImage obraz;

        public void actionPerformed(ActionEvent e) {
            String polecenie = e.getActionCommand();

            if (polecenie.equals("Otwórz")) {
                try {
                    otworz();
                } catch (IOException ex) {
                    Logger.getLogger(uklad_gl.class.getName()).log(Level.SEVERE, null, ex);
                }
            }


        }

        public void otworz() throws IOException {
            otworz = new JFileChooser("C:/");
            FileNameExtensionFilter rastrowa = new FileNameExtensionFilter("Pliki grafiki rastrowej(.jpeg,.png.,gif...)", "jpeg", "jpg", "gif", "png", "bmp");

            otworz.setFileFilter(rastrowa);

            int a = otworz.showOpenDialog(null);

            if (a == JFileChooser.APPROVE_OPTION) {
                String nazwa_pliku = otworz.getSelectedFile().getAbsolutePath();
                String roz = nazwa_pliku.substring(nazwa_pliku.lastIndexOf('.') + 1);

                obraz = ImageIO.read(otworz.getSelectedFile());
                rozklad = new JPanel() {
                    @Override
                    protected void paintComponent(Graphics g) {
                        Graphics g2 = g.create();
                        g2.drawImage(obraz, 0, 0, getWidth(), getHeight(), null);
                        g2.dispose();
                    }
                };
                add(rozklad);
                revalidate();
                repaint();
            }
        }
    }
}

klasa_zadan

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.imageio.ImageIO;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.filechooser.FileNameExtensionFilter;

//public class klasa_zadan extends JFrame implements ActionListener, WindowListener, ComponentListener, MouseListener {
public class klasa_zadan extends JFrame implements ActionListener {

    BufferedImage obraz;
    JFileChooser otworz, zapisz_jako;

    public void actionPerformed(ActionEvent e) {
        try {
            String polecenie = e.getActionCommand();

            if (polecenie.equals("Otwórz")) {
                otworz();
            }

            if (polecenie.equals("Zapisz jako...")) {
                zapisz_jako();
            }

            if (polecenie.equals("Zamknij")) {
                zamknij();
            }
        } catch (IOException ex) {
            Logger.getLogger(klasa_zadan.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void otworz() throws IOException {
        otworz = new JFileChooser("C://");

        FileNameExtensionFilter rastrowa = new FileNameExtensionFilter("Pliki grafiki rastrowej(.jpeg,.png.,gif...)", "jpeg", "jpg", "gif", "png", "bmp");
        otworz.setFileFilter(rastrowa);
        int a = otworz.showOpenDialog(null);

        if (a == JFileChooser.APPROVE_OPTION) {
            String nazwa_pliku = otworz.getSelectedFile().getAbsolutePath();
            // String roz=nazwa_pliku.substring(nazwa_pliku.lastIndexOf('.')+1);

            /*final BufferedImage*/ obraz = ImageIO.read(otworz.getSelectedFile());
            final JPanel rozklad = new JPanel(new BorderLayout()) {
                @Override
                protected void paintComponent(Graphics g) {
                    Graphics g2 = (Graphics2D) g;
                    g2.drawImage(obraz, 0, 0, this);
                    //g2.dispose();             
                }
            };
            Dimension rozmiar = new Dimension(obraz.getWidth(), obraz.getHeight());
            add(rozklad);
            revalidate();
            repaint();
        }
    }

    public void zapisz() throws IOException {
        File plik = zapisz_jako.getSelectedFile();
        String nazwa_pliku = plik.getAbsolutePath();
        String roz = nazwa_pliku.substring(nazwa_pliku.lastIndexOf(".") + 1);
        ImageIO.write(obraz, roz, plik);         //niewiadomo, czy ta metoda działa!!!!                 
    }

    public void zapisz_jako() { //zapisanie pliku do innego formatu jest uzależnione od rodzaju pliku graficznego
        zapisz_jako = new JFileChooser("C://");
        zapisz_jako.setSelectedFile(new File("beznazwy.jpg")); //tworzy plik, który będzie zapisany z domyślną nazwą
        zapisz_jako.setFileSelectionMode(JFileChooser.FILES_ONLY);

        FileNameExtensionFilter rastrowa = new FileNameExtensionFilter("Pliki grafiki rastrowej(.jpeg,.png.,gif...)", "jpeg", "jpg", "gif", "png", "bmp");
        zapisz_jako.setFileFilter(rastrowa);

        int a = zapisz_jako.showSaveDialog(null);

        if (a == JFileChooser.APPROVE_OPTION) {
            File plik = zapisz_jako.getSelectedFile();
            String nazwa_pliku = plik.getAbsolutePath();
            String roz;

            if (nazwa_pliku.indexOf(".jpg") == -1 && nazwa_pliku.indexOf(".png") == -1 && nazwa_pliku.indexOf(".gif") == -1) {
                nazwa_pliku += ".jpg"; //zostaw jpg jako domyślny
//                roz = "jpg";
//                plik = new File(nazwa_pliku);
            } else {
                roz = nazwa_pliku.substring(nazwa_pliku.lastIndexOf(".") + 1);
                try {
                    ImageIO.write(obraz, roz, plik);
                } catch (IOException ex) {
                    Logger.getLogger(klasa_zadan.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        }
    }

    public void zamknij() {
        int tn = JOptionPane.showConfirmDialog(null,
                "Czy na pewno chcesz zakończyć działanie z programem?", "Widaomość",
                JOptionPane.YES_NO_OPTION, 0, null);

        if (tn == 0) {
            System.exit(0);
        }
    }
}
于 2013-01-04T14:32:07.650 回答