2015-02-04 2 views
0

Изображение не окрашивается, когда оно запускается с помощью WordGen, как я могу это исправить? Когда я запускаю это без wordgen, я могу получить изображение. Я не уверен, что я делаю неправильно, так как я не получаю никаких ошибок. Любая помощь приветствуется.Изображение не отображается в jbutton with wordGen

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

    public class tfot extends JComponent{ 
     private static final long serialVersionUID = 1L; 
     public static void main(final String[] args) {  




SwingUtilities.invokeLater(new Runnable() { 
       @Override 
       public void run() { 
        showGUI(args); 
       } 
      }); 
     } 

     public static void showGUI(String[] args) { 
      JPanel displayPanel = new JPanel(); 
      JButton okButton = new JButton("Did You Know?"); 
      okButton.setFont(new Font("Times", Font.TRUETYPE_FONT, 100)); 
      final JLabel jLab = new JLabel(); 
      okButton.addActionListener(new ActionListener() { 
       @Override 
       public void actionPerformed(ActionEvent e) { 
        jLab.setText(wordGen()); 

       } 
      }); 
      JPanel content = new JPanel(); 
      content.setLayout(new BorderLayout()); 
      content.add(displayPanel, BorderLayout.CENTER); 
      content.add(okButton, BorderLayout.SOUTH); 
      content.add(jLab, BorderLayout.NORTH); 

      JFrame window = new JFrame("Window"); 
      window.setContentPane(content); 
      window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
      window.setSize(800, 600); 
      window.setLocation(400, 300); 
      window.setVisible(true); 
     } 
      @Override 
      public void paint(Graphics g) { 
       super.paint(g); 
       g.drawImage(Toolkit.getDefaultToolkit().getImage("Pictures/background1.png"), 0, 0, this); 

      } 


     public static String wordGen() { 

      String[] wordListOne = {"generic text","hi",}; 



      int oneLength = wordListOne.length; 

      int rand1 = (int) (Math.random() * oneLength); 

      String phrase = wordListOne[rand1] + " "; 
      return phrase; 
     } 

    } 
+0

1: Не загружайте ресурсы в пределах метод 'paint'; 2: Где хранится 'Pictures/background1.png'? 3: Вы никогда не добавляете 'tfot' ко всему, что могло бы его покрасить ... – MadProgrammer

+0

http://gyazo.com/c7a90ddf569594f41727bf4a8da6cecc – kjuy86t

+0

Тогда как я должен визуализировать изображение с помощью инструментария? – kjuy86t

ответ

0

Первая ...

Не загружать ресурсы или выполнять длительные задачи в рамках методов краски, их можно назвать несколько раз в быстрой последовательности. Вместо этого, загружать изображения, прежде чем руки и рисовать их по мере необходимости ...

public Tfot() { 
    setLayout(new BorderLayout()); 
    try { 
     background = ImageIO.read(new File("pictures/background1.png")); 
    } catch (IOException ex) { 
     ex.printStackTrace(); 
    } 
} 

@Override 
protected void paintComponent(Graphics g) { 
    super.paintComponent(g); 
    if (background != null) { 
     g.drawImage(background, 0, 0, this); 
    } 
} 

Как правило, вы обескураженный переопределение paint и вместо этого следует использовать paintComponent, много причин, но, как правило, это где окрашивается фон ...

Второй ...

Вам нужно добавить Tfot к чему-то отображаемым, в противном случае он никогда не будет окрашиваться

JFrame window = new JFrame("Window"); 
window.setContentPane(new Tfot()); 
window.add(content); 
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
window.setSize(800, 600); 
window.setLocation(400, 300); 
window.setVisible(true); 

Thrid ...

JPanel по умолчанию не является прозрачным, вы должны установить это opaque свойство false

JPanel displayPanel = new JPanel(); 
displayPanel.setOpaque(false); 
//... 
JPanel content = new JPanel(); 
content.setOpaque(false); 

Тогда это позволит, что когда-либо ниже его, чтобы показать (то есть фон изображение)

Посмотрите на Painting in AWT and Swing, Performing Custom Painting и Reading/Loading an Image для более подробной информации

Четвертый .. .

Вам необходимо изучить основы языка для продвижения по таким темам, как графический интерфейс и пользовательская живопись, без этих базовых знаний, эти темы укусят вас.

Вы должны объявить background как поле экземпляра класса Tfot

private BufferedImage background; 
public Tfot() { 

Обновлено - Полностью работоспособным пример

DidYouKnow

import java.awt.BorderLayout; 
import java.awt.Font; 
import java.awt.Graphics; 
import java.awt.Toolkit; 
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.JButton; 
import javax.swing.JComponent; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.SwingUtilities; 

public class Tfot extends JComponent { 

    private static final long serialVersionUID = 1L; 

    public static void main(final String[] args) { 

     SwingUtilities.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       showGUI(args); 
      } 
     }); 
    } 

    public static void showGUI(String[] args) { 
     JPanel displayPanel = new JPanel(); 
     displayPanel.setOpaque(false); 
     JButton okButton = new JButton("Did You Know?"); 
     okButton.setFont(new Font("Times", Font.TRUETYPE_FONT, 100)); 
     final JLabel jLab = new JLabel(); 
     okButton.addActionListener(new ActionListener() { 
      @Override 
      public void actionPerformed(ActionEvent e) { 
       jLab.setText(wordGen()); 

      } 
     }); 
     JPanel content = new JPanel(); 
     content.setOpaque(false); 
     content.setLayout(new BorderLayout()); 
     content.add(displayPanel, BorderLayout.CENTER); 
     content.add(okButton, BorderLayout.SOUTH); 
     content.add(jLab, BorderLayout.NORTH); 

     Tfot tfot = new Tfot(); 
     tfot.setLayout(new BorderLayout()); 
     tfot.add(content); 

     JFrame window = new JFrame("Window"); 
     window.setContentPane(tfot); 
     window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     window.setSize(800, 600); 
     window.setLocation(400, 300); 
     window.setVisible(true); 
    } 

    private BufferedImage background; 

    public Tfot() { 
     try { 
      background = ImageIO.read(new File("Pictures/background1.png")); 
     } catch (IOException ex) { 
      ex.printStackTrace(); 
     } 
    } 

    @Override 
    protected void paintComponent(Graphics g) { 
     super.paintComponent(g); 
     g.drawImage(background, 0, 0, this); 

    } 

    public static String wordGen() { 

     String[] wordListOne = {"generic text", "hi",}; 

     int oneLength = wordListOne.length; 

     int rand1 = (int) (Math.random() * oneLength); 

     String phrase = wordListOne[rand1] + " "; 
     return phrase; 
    } 

} 
+0

Я сделал это, и мне это не понравилось, как затмение заблудилось на каждом фоне http://pastebin.com/QnivUG1D – kjuy86t

+0

* «как затмение заблудилось на каждом фоне» * - Что это значит? Ответ основан на запуске кода, который я написал, чтобы решить проблему. – MadProgrammer

+0

http://gyazo.com/e4629aef8e168e8767c2ab03ec8351fd – kjuy86t

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