Java JPanel不是在JFrame上绘制的
链接到前面的问题:我想在面板上画画。我有以下课程: GMain.javaJava JPanel不是在JFrame上绘制的,java,swing,jframe,jpanel,Java,Swing,Jframe,Jpanel,链接到前面的问题:我想在面板上画画。我有以下课程: 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(); } }
public class GMain{
static frmDashboard fDB;
public static void main(String[] args) {
fDB = new frmDashboard();
fDB.setTitle("Graphics Mate");
fDB.setVisible(true);
fDB.pack();
}
}
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();
}
}
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());
}
}
}
frmDashboard.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();
}
}
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();
}
}
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());
}
}
}
frmplot.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();
}
}
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();
}
}
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。不是说电话线。此外,frmplot.java的输出是:
*WW = 0 HH = 0*
我按照书上的说明去做。我试图在frmCPlot类和CPanel类中添加重绘,但没有用。有什么想法吗?扩展JFrame从来都不是一个好主意,因为它是一个顶级组件。这只会导致更多的问题。相反,您应该创建一个扩展
JPanel
的类,并将其添加到JFrame中。JPanel
适用于将事物组合在一起的情况。由于您仍然需要在程序中的某个地方有一个JFrame(否则它将不显示任何内容),因此您必须生成一个变量,并向其中添加JPanel
试试这样的
JFrame frame = new JFrame("My Frame");
frame.setSize(500, 500);
frame.getContentPane().add(new JPanel MyPanel);
frame.setVisible(true);
塔克斯。作品我的GUI在Netbeans中。为什么我要写所有这些东西,而在Netbeans中我只需要将设计JPanel添加到JFrame中?i、 e是什么原因导致netbeans中没有东西,所以我必须编写代码?@EbticBobo我想你的意思是netbeans是你的IDE或编程环境;)。或者您的意思是您在Netbeans中创建了GUI?我不太确定您是在谈论代码完成(通过预测它可以帮助您完成代码行),还是其他什么。但在许多情况下,您使用的是Netbeans还是Eclipse并不重要。