[英]JFrames and JPanels
Hmm, I appear to be running into an odd problem here, that I believe I once solved, but for the life of me cannot remember. 嗯,我似乎在这里遇到了一个奇怪的问题,我相信我曾经解决过,但对于我的一生却不记得了。 I have a JFrame, with a JPanel in it, and I attempt to add another JPanel to the existing JPanel.
我有一个带有JPanel的JFrame,然后尝试将另一个JPanel添加到现有的JPanel中。 However, nothing shows up.
但是,没有任何显示。 I've placed with calling setVisible() & repaint(), but still a no go.
我已经放置了调用setVisible()和repaint()的位置,但是还是不行。
Anyone care to take a crack at this? 有人在乎吗?
Here's my code: 这是我的代码:
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package bakarangerx;
import javax.swing.*;
import java.awt.*;
/**
*
* @author Ryan
*/
public class MainForm extends javax.swing.JFrame {
/**
* Creates new form MainForm
*/
public MainForm() {
initComponents();
}
/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
* regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
FileChooser_Open = new javax.swing.JFileChooser();
FileChooser_Save = new javax.swing.JFileChooser();
Panel_Main = new javax.swing.JPanel();
jMenuBar1 = new javax.swing.JMenuBar();
jMenu1 = new javax.swing.JMenu();
MenuItem_New = new javax.swing.JMenuItem();
MenuItem_Open = new javax.swing.JMenuItem();
MenuItem_Save = new javax.swing.JMenuItem();
jMenu2 = new javax.swing.JMenu();
FileChooser_Open.setDialogTitle("Open BakaRangerX File...");
FileChooser_Open.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
FileChooser_OpenMouseClicked(evt);
}
});
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
Panel_Main.setLayout(new java.awt.GridLayout());
jMenu1.setText("File");
MenuItem_New.setText("New");
MenuItem_New.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
MenuItem_NewMouseClicked(evt);
}
});
jMenu1.add(MenuItem_New);
MenuItem_Open.setText("Open");
MenuItem_Open.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
MenuItem_OpenMouseClicked(evt);
}
});
MenuItem_Open.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
MenuItem_OpenActionPerformed(evt);
}
});
jMenu1.add(MenuItem_Open);
MenuItem_Save.setText("Save");
MenuItem_Save.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
MenuItem_SaveMouseClicked(evt);
}
});
jMenu1.add(MenuItem_Save);
jMenuBar1.add(jMenu1);
jMenu2.setText("Edit");
jMenuBar1.add(jMenu2);
setJMenuBar(jMenuBar1);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(Panel_Main, javax.swing.GroupLayout.DEFAULT_SIZE, 788, Short.MAX_VALUE)
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(Panel_Main, javax.swing.GroupLayout.DEFAULT_SIZE, 459, Short.MAX_VALUE)
.addContainerGap())
);
pack();
}// </editor-fold>
private void MenuItem_OpenActionPerformed(java.awt.event.ActionEvent evt) {
//FileChooser_Open.showOpenDialog(this);
ExaminerPanel newPanel = new ExaminerPanel();
newPanel.setMinimumSize(new Dimension(200, 200));
newPanel.setVisible(true);
Panel_Main.setVisible(true);
Panel_Main.add(newPanel);
newPanel.repaint();
Panel_Main.repaint();
this.repaint();
}
private void MenuItem_NewMouseClicked(java.awt.event.MouseEvent evt) {
// TODO add your handling code here:
}
private void MenuItem_SaveMouseClicked(java.awt.event.MouseEvent evt) {
// TODO add your handling code here:
}
private void MenuItem_OpenMouseClicked(java.awt.event.MouseEvent evt) {
// TODO add your handling code here:
}
private void FileChooser_OpenMouseClicked(java.awt.event.MouseEvent evt) {
if(!FileChooser_Open.getSelectedFile().equals(null))
{
}
}
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
/* Set the Nimbus look and feel */
//<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
/* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
* For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
*/
try {
for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (ClassNotFoundException ex) {
java.util.logging.Logger.getLogger(MainForm.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
java.util.logging.Logger.getLogger(MainForm.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
java.util.logging.Logger.getLogger(MainForm.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
java.util.logging.Logger.getLogger(MainForm.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
}
//</editor-fold>
/* Create and display the form */
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new MainForm().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JFileChooser FileChooser_Open;
private javax.swing.JFileChooser FileChooser_Save;
private javax.swing.JMenuItem MenuItem_New;
private javax.swing.JMenuItem MenuItem_Open;
private javax.swing.JMenuItem MenuItem_Save;
private javax.swing.JPanel Panel_Main;
private javax.swing.JMenu jMenu1;
private javax.swing.JMenu jMenu2;
private javax.swing.JMenuBar jMenuBar1;
// End of variables declaration
}
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package bakarangerx;
/**
*
* @author Ryan
*/
public class ExaminerPanel extends javax.swing.JPanel {
/**
* Creates new form Examiner
*/
public ExaminerPanel() {
initComponents();
}
/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
* regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
jLabel1 = new javax.swing.JLabel();
jLabel2 = new javax.swing.JLabel();
Button_Previous = new javax.swing.JButton();
Button_Next = new javax.swing.JButton();
Button_Check = new javax.swing.JButton();
jLabel3 = new javax.swing.JLabel();
jLabel4 = new javax.swing.JLabel();
jScrollPane1 = new javax.swing.JScrollPane();
TextArea_CorrectAnswer = new javax.swing.JTextArea();
jScrollPane2 = new javax.swing.JScrollPane();
TextArea_Question = new javax.swing.JTextArea();
jLabel5 = new javax.swing.JLabel();
jScrollPane3 = new javax.swing.JScrollPane();
TextArea_Answer = new javax.swing.JTextArea();
jLabel6 = new javax.swing.JLabel();
jLabel7 = new javax.swing.JLabel();
jLabel8 = new javax.swing.JLabel();
jLabel9 = new javax.swing.JLabel();
jLabel10 = new javax.swing.JLabel();
jLabel11 = new javax.swing.JLabel();
jLabel12 = new javax.swing.JLabel();
jLabel13 = new javax.swing.JLabel();
jLabel14 = new javax.swing.JLabel();
jLabel15 = new javax.swing.JLabel();
jLabel1.setText("Question");
jLabel2.setText("Correct Answer");
Button_Previous.setText("Previous");
Button_Next.setText("Next");
Button_Check.setText("Check");
jLabel3.setText("Wrong");
jLabel4.setText("Right");
TextArea_CorrectAnswer.setColumns(20);
TextArea_CorrectAnswer.setRows(5);
jScrollPane1.setViewportView(TextArea_CorrectAnswer);
TextArea_Question.setColumns(20);
TextArea_Question.setRows(5);
jScrollPane2.setViewportView(TextArea_Question);
jLabel5.setText("Answer");
TextArea_Answer.setColumns(20);
TextArea_Answer.setRows(5);
jScrollPane3.setViewportView(TextArea_Answer);
jLabel6.setText("Total Time");
jLabel7.setText("Time");
jLabel8.setText("jLabel8");
jLabel9.setText("jLabel9");
jLabel10.setText("jLabel10");
jLabel11.setText("jLabel11");
jLabel12.setText("jLabel12");
jLabel13.setText("Grade");
jLabel14.setText("jLabel14");
jLabel15.setText("%");
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
this.setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabel2)
.addComponent(jLabel1))
.addGap(18, 18, 18)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jScrollPane2)
.addComponent(jScrollPane1)))
.addGroup(layout.createSequentialGroup()
.addGap(0, 0, Short.MAX_VALUE)
.addComponent(jLabel13)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jLabel12)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jLabel3)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jLabel9)
.addGap(18, 18, 18)
.addComponent(jLabel4)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jLabel11)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jLabel7)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jLabel10))
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
.addComponent(jLabel5)
.addGap(57, 57, 57)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(Button_Previous)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(Button_Next))
.addComponent(jScrollPane3)))
.addGroup(layout.createSequentialGroup()
.addGap(0, 0, Short.MAX_VALUE)
.addComponent(Button_Check)))
.addGap(19, 19, 19))
.addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
.addComponent(jLabel6)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jLabel8)
.addGap(76, 76, 76)))
.addContainerGap())
.addGroup(layout.createSequentialGroup()
.addGap(318, 318, 318)
.addComponent(jLabel15)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jLabel14)
.addContainerGap(430, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel6)
.addComponent(jLabel8))
.addGap(16, 16, 16)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel14)
.addComponent(jLabel15))
.addGap(17, 17, 17)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel3)
.addComponent(jLabel4)
.addComponent(jLabel7)
.addComponent(jLabel9)
.addComponent(jLabel10)
.addComponent(jLabel11)
.addComponent(jLabel12)
.addComponent(jLabel13))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabel2)
.addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(22, 22, 22)
.addComponent(Button_Check)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabel5)
.addComponent(jScrollPane3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(Button_Next)
.addComponent(Button_Previous)))
.addComponent(jLabel1))
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
}// </editor-fold>
// Variables declaration - do not modify
private javax.swing.JButton Button_Check;
private javax.swing.JButton Button_Next;
private javax.swing.JButton Button_Previous;
private javax.swing.JTextArea TextArea_Answer;
private javax.swing.JTextArea TextArea_CorrectAnswer;
private javax.swing.JTextArea TextArea_Question;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel10;
private javax.swing.JLabel jLabel11;
private javax.swing.JLabel jLabel12;
private javax.swing.JLabel jLabel13;
private javax.swing.JLabel jLabel14;
private javax.swing.JLabel jLabel15;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JLabel jLabel4;
private javax.swing.JLabel jLabel5;
private javax.swing.JLabel jLabel6;
private javax.swing.JLabel jLabel7;
private javax.swing.JLabel jLabel8;
private javax.swing.JLabel jLabel9;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JScrollPane jScrollPane2;
private javax.swing.JScrollPane jScrollPane3;
// End of variables declaration
}
Use CardLayout
to add multiple JPanel
objects to your frame. 使用
CardLayout
将多个JPanel
对象添加到您的框架。 With CardLayout
you will be able to make one panel visible at any time. 使用
CardLayout
您可以随时使一个面板可见。
Here is a simple demo of CardLayout: https://stackoverflow.com/a/9377623/544983 这是CardLayout的简单演示: https : //stackoverflow.com/a/9377623/544983
Try using Component#validate
instead 尝试改用
Component#validate
//FileChooser_Open.showOpenDialog(this);
ExaminerPanel newPanel = new ExaminerPanel();
Panel_Main.add(newPanel);
Panel_Main.validate();
Panel_Main.repaint();
What exactly are you trying to achieve with two panels? 您到底想用两个面板实现什么? I copied your code in eclipse, just because it was opened, as they said, the code is long.
我将您的代码复制到eclipse中,就像他们说的那样,因为它已打开,所以代码很长。 What I see is a single frame+panel with a menu.
我看到的是带有菜单的单帧+面板。 I understand that you tied up showing the panel to the "open" menu command, so maybe you need to add a validate to your second panel call if you want to lay it over the first one?
我了解您将显示面板与“打开”菜单命令绑定在一起,因此,如果要将其放置在第一个面板调用上,则可能需要向第二个面板调用中添加验证? Or resort to layouts if you do something trickier.
或者,如果您做些棘手的事情,请诉诸布局。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.