2016-11-03 4 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 tutorial] (http://docs.oracle.com/javase/tutorial/uiswing/TOC.html) для основы Swing. Ваш код представляет собой комбинацию компонентов AWT и Swing. Не используйте AWT-компоненты в приложении Swing. Компоненты качания начинаются с «J». Нет необходимости в индивидуальной покраске. Просто используйте JLabel с иконкой. Ознакомьтесь с разделом «Как использовать значки» в учебнике. – camickr

+0

1) Чтобы лучше помочь, отправьте сообщение [MCVE] или [Short, Self Contained, Correct Example] (http://www.sscce.org/). 2) Один из способов получить изображение (-ы) для примера - это горячая ссылка на изображения, видимые в [этом Q & A] (http://stackoverflow.com/q/19209650/418556). –

ответ

1

JFrame не самое лучшее место, чтобы сделать изображение.

Согласно this question and answer, вы можете рассмотреть один из следующих подходов:

  • Используйте JLabel с иконкой.
  • Используйте JPanel, содержащий экземпляр JCustomComponent, который является классом, который расширяет JComponent и переопределяет метод paintComponent(), чтобы нарисовать нужное изображение.
+1

его проблема не в этом. его проблема в том, что он даже не добавляет jpanel нигде – gpasch

Смежные вопросы