2016-11-03 3 views
0

イメージを塗りつぶすプログラムの取得に問題があります。どのように動作するのかはわかりませんが、paintComponent(Graphics g)を定義しましたが、プログラムがそれを検出しているようです。何か間違っているのですか?JFrameに画像を追加しますか?

ここで私はところで

import java.util.Scanner; 

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 

import java.awt.Color; 
import java.awt.Graphics; 
import javax.swing.JPanel; 
import java.awt.Image; 

//add actionlistener event later 
public class ZodiacKiller extends JPanel{ 
    private JFrame mainframe; 
    private Choice month; 
    private Choice day; 
    private Label desc; 
    private Label dayDesc; 
    private int monthSelect; 
    private int daySelect; 
    private Button calc; 
    private Image[] images; 
    private String[] zodiacNames = {"aquarius","pisces","aries","taurus","gemini","cancer","leo","virgo","libra","scorpio","saggitarus","capricorn"}; 
    private Image imageSelect; 
    public ZodiacKiller(){ 
    guiProgram(); 
    } 
    public static void main(String[] args){ 
    ZodiacKiller ted = new ZodiacKiller(); 
    } 


    public void guiProgram(){ 
    mainframe = new JFrame("Zodiac Days 2016"); 
    mainframe.setSize(485,300); 
    mainframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    mainframe.setBackground(Color.WHITE); 

    //figure out how layouts work in general 
    mainframe.setLayout(new FlowLayout()); 
    Container c = mainframe.getContentPane(); 

    desc = new Label("Enter your month"); 
    mainframe.add(desc); 

    month = new Choice(); 
    month.add("1"); 
    month.add("2"); 
    month.add("3"); 
    month.add("4"); 
    month.add("5"); 
    month.add("6"); 
    month.add("7"); 
    month.add("8"); 
    month.add("9"); 
    month.add("10"); 
    month.add("11"); 
    month.add("12"); 
    mainframe.add(month); 
    month.addItemListener(new ItemListener(){ 
     public void itemStateChanged(ItemEvent ie){ 

      monthSelect = Integer.parseInt(month.getSelectedItem()); 
      dayGenerator(monthSelect); 
      buttonGenerator(); 
     } 
    }); 
    dayDesc = new Label("Enter your day"); 
    mainframe.add(dayDesc); 
    mainframe.setVisible(true); 
    } 
    public void buttonGenerator(){ 
    mainframe.setVisible(false); 
    if(calc != null){ 
     mainframe.remove(calc); 
     calc = null; 
     oldChoiceDeleter(); 
    } 
    calc = new Button("Calculate!"); 
    mainframe.add(calc); 
    calc.addActionListener(new ActionListener(){ 
     public void actionPerformed(ActionEvent evt){ 
     daySelect = Integer.parseInt(day.getSelectedItem()); 
     Zodiac teddie = new Zodiac(daySelect, monthSelect); 
     imageMount(teddie.zodiacCalc()); 
     repaint(); 
     System.out.println("everything works!"); 
     } 
    }); 
    mainframe.setVisible(true); 
    } 
    public void dayGenerator(int monthSelect){ 

    mainframe.setVisible(false); 

    if(day != null){ 
     mainframe.remove(day); 
     day = null; 
     oldChoiceDeleter(); 

    } 
    day = new Choice(); 
    day.add("1"); 
    day.add("2"); 
    day.add("3"); 
    day.add("4"); 
    day.add("5"); 
    day.add("6"); 
    day.add("7"); 
    day.add("8"); 
    day.add("9"); 
    day.add("10"); 
    day.add("11"); 
    day.add("12"); 
    day.add("13"); 
    day.add("14"); 
    day.add("15"); 
    day.add("16"); 
    day.add("17"); 
    day.add("18"); 
    day.add("19"); 
    day.add("20"); 
    day.add("21"); 
    day.add("22"); 
    day.add("23"); 
    day.add("24"); 
    day.add("25"); 
    day.add("26"); 
    day.add("27"); 
    day.add("28"); 
    day.add("29"); 
    switch(monthSelect){ 
     case 1: case 3: case 5: case 7: case 8: case 10: case 12: 
     day.add("30"); 
     day.add("31"); 
     case 4: case 6: case 9: 
     day.add("30"); 
     default: 

    } 
    mainframe.add(day); 
    mainframe.setVisible(true); 
    } 
    //start here 
    public void imageMount(int output){ 
    images = new Image[12]; 
    for (int i = 1; i<=12;i++){ 
     Image temp = (new ImageIcon("img/no" + i + ".jpeg")).getImage(); 
     images[i-1] = temp; 
    } 
    imageSelect = images[output - 1]; 
    System.out.println(zodiacNames[output-1] + "\n" + output); 
    //make sure the image selection process works. 


    } 
    public static void oldChoiceDeleter(){ 
    return; 
    } 
    public static void cmdPrompt(){ 
    Scanner kb = new Scanner(System.in); 
    System.out.println("Day?"); 
    int day = kb.nextInt(); 
    System.out.println("Month? (1 ~ 12)"); 
    int month = kb.nextInt(); 
    Zodiac tedCruz = new Zodiac(day, month); 
    System.out.println(tedCruz.zodiacCalc()); 
    } 
    @Override 
    public void paintComponent(Graphics g){ 
    super.paintComponent(g); 
    g.drawImage(imageSelect, 50, 50, null); 
    System.out.println("I went here!"); 
    } 
} 
+0

ここで、「JPanel」をユーザーインターフェイス(メインフレームなど)に追加しますか? – copeg

+0

まずSwingの基本について[Swingチュートリアル](http://docs.oracle.com/javase/tutorial/uiswing/TOC.html)を読んでください。あなたのコードは、AWTコンポーネントとSwingコンポーネントの組み合わせです。 SwingアプリケーションではAWTコンポーネントを使用しないでください。スイングコンポーネントは "J"で始まります。カスタムペインティングの必要はありません。アイコン付きのJLabelを使用するだけです。チュートリアルの「How to Use Icons」のセクションを参照してください。 – camickr

+0

1)すぐに役立つようにするには、[MCVE]または[短く、自己完結型の正しい例](http://www.sscce.org/)を投稿してください。 2)画像を取得する方法の1つは、[このQ&A](http://stackoverflow.com/q/19209650/418556)に表示されている画像にホットリンクすることです。 –

答えて

1

JFrameは、画像を描画するのに最適な場所ではありません持っているコードです。

this question and answerによると、次のいずれかの方法を検討する必要があります

  • がアイコンでJLabelを使用してください。
  • JComponentを拡張し、paintComponent()メソッドをオーバーライドして、目的のイメージを描画するクラスであるJCustomComponentのインスタンスを含むJPanelを使用します。
+1

彼の問題はこれではありません。彼の問題は彼がどこでもjpanelを追加することはありません – gpasch

関連する問題