Я пытаюсь создать класс (называемый запас), который может быть идентифицирован как компонент, и позвольте мне использовать Listener на нем.
Однако, это не окрашено, если вы не указали (не очень хорошая идея!), Чтобы нарисовать его в панели panel.paint().
Программа работает как это:
Мой пользовательский компонент не может быть окрашен
JFrame frame = new JFrame ("..");
frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
final Stock theStock=new Stock();
JPanel primary = new JPanel();
primary.setPreferredSize(new Dimension(500,500));
primary.add(theStock);
frame.getContentPane().add(primary);
frame.pack();
frame.setVisible(true);
The Stock не будет окрашиваться, если первичный (JPanel) является перекрываться, так что есть спецификация вызова запас рисовать:
@Override
public void paint(Graphics g) {
super.paint(g);
g.setColor(Color.black);
g.drawRect(x-2, y-2, 74, 124);
}
Вот мой код - я думаю, проблема может произойти, потому что я не переопределял ничего, кроме метода рисования, унаследованного от Component.
********** Модифицированный быть проверяемым, пожалуйста, смотрите ниже
**
import java.awt.*;
import javax.swing.*;
@SuppressWarnings("serial")
public class Stock extends Component{
private int x; //the position for image
private int y;//position for image
public Stock() {
x=285;
y=280;
}
@Override
public void paint(Graphics g) {
super.paint(g);
g.setColor(Color.black);
g.drawRect(x-2, y-2, 74, 124);
}
public void works(){
JFrame frame = new JFrame ("..");
frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
final Stock theStock=new Stock();
JPanel primary = new JPanel(){
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
theStock.paint(g);
}
};
primary.setPreferredSize(new Dimension(500,500));
primary.add(theStock);
frame.getContentPane().add(primary);
frame.pack();
frame.setVisible(true);
}
public void doesNotWork(){
JFrame frame = new JFrame ("..");
frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
final Stock theStock=new Stock();
JPanel primary = new JPanel();
primary.setPreferredSize(new Dimension(500,500));
primary.add(theStock);
frame.getContentPane().add(primary);
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
Stock a = new Stock();
a.works();
//a.doesNotWork();
}
}
p.s.1. Я не использую JComponent, потому что JComponent имеет больше функциональных возможностей, чем мне нужно использовать. Компонент, из которого наследуется Container и Button, должен работать хорошо.
п.с.2. Даже вы используете JComponent, вы получаете тот же результат. Код ниже.
import java.awt.*;
импорт javax.swing. *;
@SuppressWarnings("serial")
public class Stock extends JComponent{
private int x; //the position for image
private int y;//position for image
public Stock() {
x=285;
y=280;
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.black);
g.drawRect(x-2, y-2, 74, 124);
}
public void works(){
JFrame frame = new JFrame ("..");
frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
final Stock theStock=new Stock();
JPanel primary = new JPanel(){
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
theStock.paint(g);
}
};
primary.setPreferredSize(new Dimension(500,500));
primary.add(theStock);
frame.getContentPane().add(primary);
frame.pack();
frame.setVisible(true);
}
public void doesNotWork(){
JFrame frame = new JFrame ("..");
frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
final Stock theStock=new Stock();
JPanel primary = new JPanel();
primary.setPreferredSize(new Dimension(500,500));
primary.add(theStock);
frame.getContentPane().add(primary);
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
Stock a = new Stock();
//a.works();
a.doesNotWork();
}
}
Где ваш главный метод? Как вы используете этот класс? И @Ashiquzzaman, он не может переопределить paintComponent, потому что его класс (по какой-то неизвестной причине) не расширяет JComponent или JPanel, а скорее компонент AWT-класса? –
@HovercraftFullOfEels, Извините, я не заметил. – ashiquzzaman33
@Ashiquzzaman: проблем нет, но остальные вопросы в моем сообщении выше. Г-н K. Mole - пожалуйста, покажите нам, как вы используете этот класс, и, пожалуйста, сообщите нам, почему вы пытаетесь использовать устаревший класс компонентов AWT, компонент и не менее устаревшие классы компонентов Swing , –