gpt4 book ai didi

java - 重绘位于另一个 JPanel 中的 JPanel

转载 作者:搜寻专家 更新时间:2023-10-31 20:04:39 24 4
gpt4 key购买 nike

事情是这样的:

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();
}

我还有一个类(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();
}
}

我想要的是在调用 ChildPanel 中的 pushData() 方法时绘制一些线条。但是现在ChildPanel内部没有响应。我该怎么办?

最佳答案

childPanel 不是任何容器的一部分,它的 paintComponent 不会被调用。尝试将它作为子项添加到 ParentPanel,即在 initComponents 中调用 add(childPanel)

编辑:基于发布代码的示例

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();
}
}
}

关于java - 重绘位于另一个 JPanel 中的 JPanel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11877242/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com