1

//編集:ここで混乱したくないので、私が編集した質問;)こんにちは。ここに私が問題を抱えている2つのクラスがあります。サブクラスを開いて画像を表示するクラスであるプログラムではうまく機能しますが、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

いくつかの小さな問題。私はそれがinvokeLaterだと思います。

私はパネルに好みのサイズを与えました。

コンポーネント クラス (JFrame?) に BorderLayout があると仮定して、別の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();
            }
        });
    }
}

PS JLabel も使用できます。それはより簡単です。

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

編集後

すべてのクラスを使用しようとしました。私はいくつかの修正をしなければなりませんでした。obrazたとえば、フィールドとローカル変数の両方として宣言されていたため、一方が他方を隠していました。私は NetBeans IDE を使用しましたが、いくつかの警告と修正提案が表示されました。

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();
            }
        }
    }
}

クラサザダン

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 に答える