2016-11-18 2 views
0

Напишите программу, которая показывает окно с тремя кнопками. Каждая кнопка имеет такие названия, как «Красный», «Зеленый» и «Синий». В этом окне есть также метка. Метка содержит значок. Этот значок должен быть CompositeIcon, где в начале пуст. Каждый раз, когда вы нажимаете кнопку, вы можете видеть квадрат с цветом кнопки, например, для примера «нажмите синюю кнопку -> появится синий квадрат в окне». Пока у меня это есть. У меня есть три кнопки с их именем цвета. Я каждый раз, когда я нажимаю одну из кнопок, не работает. Что мне нужно сделать?Как сделать кнопки, чтобы сделать квадрат с цветом?

Код:

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

public class ActionTester{ 

    public static void main(String[] args){ 
      JFrame frame = new JFrame(); 
      final JTextField textField = new JTextField(); 

      JButton RedButton = new JButton("Red"); 

      RedButton.addActionListener(new ActionListener() { 
        @Override 
        public void actionPerformed(ActionEvent e) { 
          SquareIcon red = new SquareIcon(20,Color.RED); 
          CompositeIcon ci = new CompositeIcon(); 
          ci.addIcon(red); 
        } 
      }); 

      JButton GreenButton = new JButton("Green"); 

      GreenButton.addActionListener(new ActionListener() { 
        @Override 
        public void actionPerformed(ActionEvent e) { 
          SquareIcon green = new SquareIcon(20,Color.GREEN); 
          CompositeIcon ci = new CompositeIcon(); 
          ci.addIcon(green); 
        } 
      }); 

      JButton BlueButton = new JButton("Blue"); 

      BlueButton.addActionListener(new ActionListener() { 
        @Override 
        public void actionPerformed(ActionEvent e) { 
          SquareIcon blue = new SquareIcon(20,Color.BLUE); 
          CompositeIcon ci = new CompositeIcon(); 
          ci.addIcon(blue); 
        } 
      }); 

      frame.setLayout(new FlowLayout()); 
      frame.add(RedButton); 
      frame.add(GreenButton); 
      frame.add(BlueButton); 
      frame.add(textField); 
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
      frame.pack(); 
      frame.setVisible(true); 
    } 
} 
+0

Эй, я не уверен, если его же упражнение, но посмотрите на это: HTTP://stackoverflow.com/questions/19881700/buttons-and-icons-within-a-label-squareicon. Это похоже на вашу задачу. – endkugelfang

ответ

2

Все, что вам нужно сделать, это создать один квадратный предмет, который вы меняете в ActionListener как:

final JPanel sqr = new JPanel(); 

JButton RedButton = new JButton("Red"); 

RedButton.addActionListener(new ActionListener() 
{ 
    @Override 
    public void actionPerformed(ActionEvent e) 
    { 
    sqr.setBackground(Color.RED); 
    } 
}); 

И не забудьте добавить sqr к раме

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

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

в моем проекте это сводилось к

import java.awt.Color; 
import java.awt.FlowLayout; 
import java.awt.Frame; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JTextField; 

Некоторые Иды можно сортировать вас импортирует автоматически, так что вам не нужно беспокоиться из наиболее распространенных импорта больше

+0

Спасибо, что ответили на мой вопрос. Что делать, если я хотел бы сделать более одного красного квадрата, например, для примера, каждый раз, когда я нажимаю красную кнопку, рядом будет появляться красный квадрат. Как мне это сделать? – MrDavidNhan10

+0

Nevermind Я думаю, что понял. В любом случае, спасибо. – MrDavidNhan10

+2

Некоторые взгляды и чувства не поддерживают цвет фона кнопок. Для более надежного подхода используйте «ColoredIcon», как показано в [этом ответе] (http://stackoverflow.com/a/13943044/418556). Это будет работать через PLAF и системы. (Обратите внимание, что ответ добавляет значки в метки, но кнопки также принимают значки.) –

1

кнопки сама работать, но вы никогда не добавить compositeicon к раме. поэтому ничего не отображается

+0

Благодарим за указание этого. – MrDavidNhan10