2015-08-13 3 views
0

Я просмотрел столько потоков, и никто не помог мне. Вот мой код:Как я могу сделать эту обычную работу JButton?

package myProjects; 

import java.awt.BasicStroke; 
import java.awt.Color; 
import java.awt.Graphics; 
import java.awt.Graphics2D; 
import java.awt.Shape; 
import java.awt.geom.*; 
import javax.swing.JButton; 
import javax.swing.JComponent; 
import javax.swing.JFrame; 

public class LukeButton extends JButton{ 
public static void main(String[] args){ 
    JFrame frame = new JFrame(); 
    frame.setTitle("Luke"); 
    frame.setSize(300, 300); 
    frame.setLocationRelativeTo(null); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    LukeButton lb = new LukeButton("Text"); 
    lb.addActionListener(e->{ 
     System.out.println("Clicked"); 
    }); 

    frame.setVisible(true); 
} 
public LukeButton(String text){ 

} 
public void paint(Graphics g){ 
    Graphics2D g2 = (Graphics2D)g; 

    Shape rec = new Rectangle2D.Float(10, 10, 60, 80); 

    g2.setColor(Color.BLACK); 
    g2.setStroke(new BasicStroke(2)); 
    g2.draw(rec); 
    g2.setColor(Color.BLUE); 
    g2.fill(rec); 
    } 
} 

И прямоугольник, который должен быть там, нет. Я не знаю, разрешено ли это при расширении JButton, но если это не так, я не знаю, как это исправить. у кого-нибудь есть решение?

ответ

3

Основная проблема: вы не добавляете экземпляр LukeButton в GUI. Решение: добавьте его с помощью метода add(lb) контейнера.

public static void main(String[] args) { 
    LukeButton lb = new LukeButton("Text"); 
    JPanel panel = new JPanel(); 
    panel.add(lb); 

    JFrame frame = new JFrame(); 
    frame.add(panel); 

Другие проблемы:

  • Вы должны переопределить метод paintComponent не метод краски
  • вызов метода paintComponent супер в переопределения
  • переопределять значение GetPreferredSize вашего компонента.
  • Не игнорируйте строку, переданную в параметр вашего конструктора. Вероятно, вы захотите передать его в конструктор супер.
  • Возможно, вам гораздо лучше не использовать наследование, чтобы делать то, что вы пытаетесь сделать, то есть не расширять JButton. Если вы можете дать нам более подробную информацию о вашей общей проблеме, мы можем помочь.
+0

Спасибо, сейчас работает, я не могу поверить, что прошло мимо меня! И для параметра в конструкторе я собирался использовать это для текста на кнопке, но просто еще не сделал этого :) Спасибо еще раз. –

+0

Я прочитал ваше редактирование, и моя цель состоит в том, чтобы иметь кнопку (тот, который у меня сейчас просто прекрасен), который я могу использовать вместо Скучного JButton. Но я действительно не знаю, как решить эту проблему. –

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