2013-12-10 5 views
0

Вот мой Всплеск код:Невозможно создать экран заставки для программы, также проблема цвета?

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

public class AddSplash extends JPanel { 
    public void paintComponent(Graphics g){ 
     super.paintComponent(g); 
     g.setFont(new Font("Serif", Font.BOLD, 32)); 
     g.drawString("Shape Stamper!", 150, 220); 
     g.setFont(new Font("Serif", Font.ITALIC, 16)); 
     g.drawString("Programmed by: Null", 150, 245); 
    } 

} 

Вот мой Main:

import java.awt.*; 
import java.awt.event.*; 
import java.awt.geom.*; 
import java.util.*; 

import javax.swing.JComponent; 

public class ButtonComponent extends JComponent { 

    int temp; 
    Color randColor; 
    Random generator = new Random(); 

    public ButtonComponent() { 
     this.temp = temp; 
     addMouseListener(new MouseHandler()); 
    } 
    private ArrayList<Rectangle2D> arrOfRect = new ArrayList<>(); 
    private ArrayList<Ellipse2D> arrOfEllipse = new ArrayList<>(); 

    public void paintComponent(Graphics g) { 
     super.paintComponent(g); 
     Graphics2D g2 = (Graphics2D) g; 
     for (Rectangle2D e : arrOfRect) { 
      g.setColor(getRandomColor()); 
      g2.draw(e); 
     } 
     for (Ellipse2D e : arrOfEllipse) { 
      g.setColor(getRandomColor()); 
      g2.draw(e); 
     } 
    } 
    public void add(Point2D p) { 
     double x = p.getX(); 
     double y = p.getY(); 
     if (Stamper.temp == 1) { 
      Ellipse2D ellipse = new Ellipse2D.Double(x, y, 100, 100); 
      arrOfEllipse.add(ellipse); 
     } 
     if (Stamper.temp == 2) { 
      Rectangle2D rectangle2 = new Rectangle2D.Double(x, y, 100, 100); 
      arrOfRect.add(rectangle2); 
     } 
     if (Stamper.temp == 3) { 
      Rectangle2D rectangle2 = new Rectangle2D.Double(x, y, 150, 100); 
      arrOfRect.add(rectangle2); 
     } 
     if (Stamper.temp == 4) { 
      Ellipse2D ellipse = new Ellipse2D.Double(x, y, 100, 50); 
      arrOfEllipse.add(ellipse); 
     } 
    } 

    private class MouseHandler extends MouseAdapter { 

     public void mousePressed(MouseEvent event) { 
      add(event.getPoint()); 
      repaint(); 
     } 
    } 

    private Color getRandomColor() { 
     return new Color(generator.nextFloat(), generator.nextFloat(), generator.nextFloat()); 
    } 
} 

и, наконец, другой класс:

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

public class Stamper extends JFrame { 
    public static int temp = 0; 
    public static void main(String[] args) { 
     JFrame frame = new JFrame("Shape Stamper!"); 
     AddSplash splash = new AddSplash(); 

     JPanel container; 
     JPanel splashtext; 
     JButton circle = new JButton("Circle"); 
     JButton square = new JButton("Square"); 
     JButton rectangle = new JButton("Rectangle"); 
     JButton oval = new JButton("Oval"); 

     //splashtext.add(splash); 
     container = new JPanel(new GridLayout(1,4)); 
     container.add(circle); 
     container.add(square); 
     container.add(rectangle); 
     container.add(oval); 


     circle.addActionListener(new ActionListener(){ 
      @Override 
      public void actionPerformed(ActionEvent e){ 
       temp = 1; 
      } 
     }); 
     square.addActionListener(new ActionListener(){ 
      @Override 
      public void actionPerformed(ActionEvent e){ 
       temp = 2; 
      } 
     }); 
      rectangle.addActionListener(new ActionListener(){ 
      @Override 
      public void actionPerformed(ActionEvent e){ 
       temp = 3; 
      } 
     }); 
      oval.addActionListener(new ActionListener(){ 
      @Override 
      public void actionPerformed(ActionEvent e){ 
       temp = 4; 
      } 
     }); 
      ButtonComponent shape = new ButtonComponent(); 
      frame.setSize(500, 500); 

      frame.add(shape, BorderLayout.CENTER); 
      frame.add(container, BorderLayout.SOUTH); 

      frame.setVisible(true); 
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    } 
} 

Теперь по некоторым причинам я не могу сохранить цвет на созданных фигур по мере их создания. Я бы хотел, чтобы он появился, а затем сохранил цвет. Другая проблема, с которой я сталкиваюсь, заключается в том, что я не могу заставить свой шрифт появляться, а затем уничтожаться или потерять видимость при нажатии кнопки.

ответ

1

я не могу сохранить цвет на созданных форм, как они созданы

Вы должны сохранить цвет формы, а также фактическую форму в вашем ArrayList.

См. Пример DrawOnComponent от Custom Painting Approaches для примера того, как это можно сделать.

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

+0

Это чрезвычайно полезно, любые мысли о всплеске текста? – user3085119

+0

@ user3085119, 'любые мысли о тексте всплеска? -' - Я не вижу, где вы добавляете компонент AddSplash в графический интерфейс. Даже если вы это сделаете, я сомневаюсь, что это будет отображаться, потому что вы не переопределили метод getPreferredSize(), чтобы вернуть разумный размер для вашей панели, поэтому его размер равен (0, 0), поэтому рисовать нечего. Почему вы делаете обычную картину? Просто создайте JPanel с несколькими JLabels, чтобы отобразить текст. – camickr

+0

спасибо, им все еще хватают основы использования графики с java – user3085119

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