[英]repaint JPanel which is inside another JPanel
Here is the thing: 这是东西:
public class ParentPanel extends JPanel{
private ChildPanel childPanel;
public ParentPanel() {
super();
initComponents();
}
public void pushData(int data){
childPanel.pushData(data);
}
private void initComponents() {
childPanel= new ChildPanel();
}
I have another class: 我还有另一堂课:
public class ChildPanel extends JPanel{
public ChildPanel(){
super();
}
public void paintComponent(Graphics g){
//I draw some lines in this JPanel according to data
}
public void pushData(int data){
repaint();
}
}
What I want is to draw some lines when the pushData()
method inside ChildPanel is called. 我想要的是在pushData()
方法时画一些线。 But now there is no responding inside the ChildPanel. 但是现在ChildPanel内部没有任何响应。 What should I do? 我该怎么办?
childPanel
is not part of any container, its paintComponent
is not going to be called. childPanel
不是任何容器的一部分,不会调用其paintComponent
。 Try adding it as a child to ParentPanel
, ie inside initComponents
call add(childPanel)
. 尝试将其作为子项添加到ParentPanel
,即在initComponents
内部调用add(childPanel)
。
EDIT: sample based on posted code 编辑:基于已发布代码的示例
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class TestChild {
public static void main(String[] args){
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
final ParentPanel parent = new ParentPanel();
JButton button = new JButton("Push");
button.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
parent.pushData(7);
}
});
JPanel panel = new JPanel();
panel.setLayout(new BorderLayout());
panel.add(parent, BorderLayout.CENTER);
panel.add(button, BorderLayout.SOUTH);
frame.add(panel);
frame.pack();
frame.setVisible(true);
frame.setLocationRelativeTo(null);
}
public static class ParentPanel extends JPanel {
private ChildPanel childPanel;
public ParentPanel() {
super();
initComponents();
}
public void pushData(int data) {
childPanel.pushData(data);
}
private void initComponents() {
childPanel = new ChildPanel();
add(childPanel);
}
}
public static class ChildPanel extends JPanel {
private Random random = new Random();
public ChildPanel() {
super();
setPreferredSize(new Dimension(200, 200));
}
@Override
public void paintComponent(Graphics g) {
System.out.println(getWidth());
g.setColor(getBackground());
g.fillRect(0, 0, getWidth(), getHeight());
g.setColor(Color.getHSBColor(random.nextFloat(), 0.9f, 1.0f));
g.fillOval(0, 0, getWidth(), getHeight());
}
public void pushData(int data) {
repaint();
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.