JPanel 不是在 JFrame 上绘制的
JPanel is not draw on JFrame
链接到上一个问题:我想在面板上绘图。我有以下 classes:
GMain.java
public class GMain{
static frmDashboard fDB;
public static void main(String[] args) {
fDB = new frmDashboard();
fDB.setTitle("Graphics Mate");
fDB.setVisible(true);
fDB.pack();
}
}
frmDashboard.java
public class frmDashboard extends javax.swing.JFrame {
public frmDashboard() {
initComponents();
Clear();
}
private void btnPlotActionPerformed(java.awt.event.ActionEvent evt) {
frmCPlot fCP = new frmCPlot();
fCP.setVisible(true);
fCP.pack();
}
}
frmCPlot.java
public class frmCPlot extends javax.swing.JFrame {
int W, H;
int N;
public frmCPlot() {
initComponents();
CPanel cp = new CPanel();
this.getContentPane().add(cp);
System.out.println("WW = " + cp.getWidth() +
" HH = " + cp.getHeight());
}
class CPanel extends JPanel{
int i, j;
public CPanel(){
setPreferredSize(new Dimension(400, 400));
setBackground(Color.WHITE);
}
@Override
public void paintComponent(Graphics g){
super.paintComponent(g);
g.drawLine(0, 0, this.getWidth(), this.getHeight());
}
}
}
显示了frmCPlot,但没有显示CPanel。不谈线。此外,frmCPlot.java 的输出是:
*WW = 0 HH = 0*
我按照书上的说明做了。我尝试在 frmCPlot class、CPanel class 中添加重绘,但没有用。有什么想法吗?
扩展 JFrame 从来都不是一个好主意,因为它是 顶级组件。这只会导致更多的问题。相反,您应该创建一个扩展 JPanel
的 class 并将其添加到 JFrame。 JPanel
适用于将事物组合在一起的情况。由于您的程序中仍然必须有一个 JFrame(否则它将不显示任何内容),因此您必须创建一个变量并将 JPanel
添加到它。
尝试这样的事情
JFrame frame = new JFrame("My Frame");
frame.setSize(500, 500);
frame.getContentPane().add(new JPanel MyPanel);
frame.setVisible(true);
链接到上一个问题:我想在面板上绘图。我有以下 classes:
GMain.java
public class GMain{
static frmDashboard fDB;
public static void main(String[] args) {
fDB = new frmDashboard();
fDB.setTitle("Graphics Mate");
fDB.setVisible(true);
fDB.pack();
}
}
frmDashboard.java
public class frmDashboard extends javax.swing.JFrame {
public frmDashboard() {
initComponents();
Clear();
}
private void btnPlotActionPerformed(java.awt.event.ActionEvent evt) {
frmCPlot fCP = new frmCPlot();
fCP.setVisible(true);
fCP.pack();
}
}
frmCPlot.java
public class frmCPlot extends javax.swing.JFrame {
int W, H;
int N;
public frmCPlot() {
initComponents();
CPanel cp = new CPanel();
this.getContentPane().add(cp);
System.out.println("WW = " + cp.getWidth() +
" HH = " + cp.getHeight());
}
class CPanel extends JPanel{
int i, j;
public CPanel(){
setPreferredSize(new Dimension(400, 400));
setBackground(Color.WHITE);
}
@Override
public void paintComponent(Graphics g){
super.paintComponent(g);
g.drawLine(0, 0, this.getWidth(), this.getHeight());
}
}
}
显示了frmCPlot,但没有显示CPanel。不谈线。此外,frmCPlot.java 的输出是:
*WW = 0 HH = 0*
我按照书上的说明做了。我尝试在 frmCPlot class、CPanel class 中添加重绘,但没有用。有什么想法吗?
扩展 JFrame 从来都不是一个好主意,因为它是 顶级组件。这只会导致更多的问题。相反,您应该创建一个扩展 JPanel
的 class 并将其添加到 JFrame。 JPanel
适用于将事物组合在一起的情况。由于您的程序中仍然必须有一个 JFrame(否则它将不显示任何内容),因此您必须创建一个变量并将 JPanel
添加到它。
尝试这样的事情
JFrame frame = new JFrame("My Frame");
frame.setSize(500, 500);
frame.getContentPane().add(new JPanel MyPanel);
frame.setVisible(true);