2015-04-08 2 views
0

Моя программа состоит из двух классов (test и paintClass) в разных файлах. В классе paintClass я рисую квадратную панель размером 5x5, используя метод paintComponent. Я хочу добавить кнопки на каждом маленьком квадрате на большом квадрате. Когда я запускаю код, я не получаю никаких кнопок. Я хочу иметь 25 (5x5) кнопок, используя jpanel на фигуре, нарисованной paintComponent. Это возможно? Если да, то как я могу это сделать?Добавление кнопок нарисованной фигуры paintComponent

EDIT: Проблема была в петле. Номер имел значение по умолчанию 0, поэтому цикл не работал. Я определил число в начале. Он решил проблему. Также один из инвервалов был неправильным. Я изменил J = 0 при у = 1.

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

public class test 
{ 

    public static void main(String[] args) 
    { 

     JFrame frame = new JFrame("buttons"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setSize(250,250); 
     PaintClass paint = new PaintClass(); 
     paint.repaint(); 
     f1.getContentPane().add(paint); 
     frame.pack(); 
     frame.setVisible(true); 
    } 
} 



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

public class PaintClass extends JPanel 
{ 
    private Graphics g; 
    private int interval,side,number; 
    private JButton button; 

    public PaintClass() 
    { 
     number = 5; 
     button = new JButton(); 
     setLayout(new GridLayout(5,5)); 
     for(int i = 0; i <= number - 1; i++) 
     { 
      for(int j = 1; j <= number - 1; j++) 
      { 
       button = new JButton();//ADDED 
       button.setBounds(i * interval, 0, interval, interval); 
       add(button); 
      } 
      button = new JButton();//ADDED 
      button.setBounds(0, i * interval, interval, interval); 
      add(button); 
     } 
    } 

    public void paintComponent(Graphics g) 
    { 
     super.paintComponent(g); 
     this.repaint(); 
     side = 250; 
     number = 5; 
     interval = side/number; 
     g.drawRect(0,0, side, side); 

     for(int i = 0; i <= number - 1; i++) 
     { 
      for(int j = 0; j <= number - 1; j++) 
      { 
       g.drawLine(i * interval, 0, i * interval, side); 
      } 
      g.drawLine(0, i * interval, side, i * interval); 
     } 

    } 
} 
+1

Имена классов должны начинаться с символа верхнего регистра. «paintClass» ошибочен и должен быть «PaintClass». Обновите свой опубликованный код, чтобы форум мог правильно обозначать имена классов, если вы хотите, чтобы люди читали ваши вопросы. – camickr

+0

Думаю, вам нужно предоставить paintClass. Добавить кнопки в вашу раскрашенную сетку может быть трудно достигнуть, учитывая особенности управления компоновкой. – MadProgrammer

ответ

1

Выберите один или другой: либо добавьте кнопки с помощью GridLayout, либо нарисуйте кнопки с помощью paintComponent. Если первое, вы должны: a) определить ограничение цикла (теперь это 0); b) создать новый JButton для каждого цикла (ваш код в настоящее время повторно использует экземпляр); c) зарегистрировать соответствующий ActionListener для ответа на события. Если последний, вам необходимо зарегистрировать соответствующий слушатель (например, MouseListener), чтобы отвечать на события, созданные пользователем.

+0

Что я хочу сделать, это добавить настоящие кнопки, чтобы их не рисовать. Я буду использовать их в качестве обычных кнопок в будущем. – hackerboy

+0

Проблема была в цикле. Благодарю. – hackerboy

1
private int interval,side,number; 

Номер по умолчанию имеет значение 0.

for(int i = 0; i <= number - 1; i++) 

Поскольку число 0, ваш цикл никогда не будет выполнять.

Как только вы сделаете это, кнопки будут добавлены к панели, но они будут покрывать вашу обычную картину. Чтобы увидеть фоновые линии, вам просто нужно установить фон панели на Color.BLACK, а затем создать GridLayout с промежутком между компонентами. Прочтите API для используемого метода.

+0

Проблема была в цикле. Спасибо – hackerboy