sách gpt4 ai đã đi

java - JPanel 调整大小显示另一个 JPanel

In lại 作者:行者123 更新时间:2023-11-30 05:53:23 29 4
mua khóa gpt4 Nike

我对嵌套的 BoxLayouts 有疑问。

我想构建一个由 2 个子面板组成的 DropDownPanel:顶部的标题和底部的主体。 body 最初是隐藏的。通过单击标题,您可以切换正文的可见性并显示其内容(如展开/折叠)。

总的来说,这很好用。但是有一些奇怪的行为:
如果只有一个 DropDownPanel 展开而另一个折叠,则折叠的 DropDownPanel 会调整大小并向右浮动。

我已经试验过 JPanel 的属性,如 alignmentX,但我找不到我的错误。有谁知道我做错了什么?

Mã như sau:
DropDownPanel.java

public class DropDownPanel extends javax.swing.JPanel {

private boolean mShowContent = false;

/**
* Creates new form DropDownPanel
*/
public DropDownPanel() {
initComponents();
showContent(mShowContent);
}

private void showContent(boolean showContent) {
mShowContent = showContent;
System.out.println(mShowContent? "show" : "hide");
body.setVisible(mShowContent);
revalidate();
}

/**
* 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")
// //GEN-BEGIN:initComponents
private void initComponents() {

jPanel3 = new javax.swing.JPanel();
header = new javax.swing.JPanel();
jLabel1 = new javax.swing.JLabel();
body = new javax.swing.JPanel();
jPanel5 = new javax.swing.JPanel();
jLabel2 = new javax.swing.JLabel();

setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
setLayout(new javax.swing.BoxLayout(this, javax.swing.BoxLayout.Y_AXIS));

jPanel3.setLayout(new javax.swing.BoxLayout(jPanel3, javax.swing.BoxLayout.Y_AXIS));

header.setMaximumSize(new java.awt.Dimension(32000, 60));
header.setMinimumSize(new java.awt.Dimension(0, 60));
header.setPreferredSize(new java.awt.Dimension(0, 60));
header.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
headerMouseClicked(evt);
}
});
header.setLayout(new javax.swing.BoxLayout(header, javax.swing.BoxLayout.X_AXIS));

jLabel1.setText("Click Me!");
header.add(jLabel1);

jPanel3.add(header);

body.setLayout(new javax.swing.BoxLayout(body, javax.swing.BoxLayout.Y_AXIS));

jPanel5.setLayout(new javax.swing.BoxLayout(jPanel5, javax.swing.BoxLayout.X_AXIS));

jLabel2.setText("jLabel2");
jPanel5.add(jLabel2);

body.add(jPanel5);

jPanel3.add(body);

add(jPanel3);
}//
//GEN-END:initComponents

private void headerMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_headerMouseClicked
System.out.println("asd");
showContent(!mShowContent);
}//GEN-LAST:event_headerMouseClicked
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JPanel body;
private javax.swing.JPanel header;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JPanel jPanel3;
private javax.swing.JPanel jPanel5;
// End of variables declaration//GEN-END:variables
}

测试框架.java

public class TestFrame extends javax.swing.JFrame {

/**
* Creates new form TestFrame
*/
public TestFrame() {
initComponents();
jPanel1.add(new DropDownPanel());
jPanel1.add(new DropDownPanel());
revalidate();
}

/**
* 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")
// //GEN-BEGIN:initComponents
private void initComponents() {

jScrollPane1 = new javax.swing.JScrollPane();
jPanel1 = new javax.swing.JPanel();

setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setMinimumSize(new java.awt.Dimension(400, 300));

jPanel1.setLayout(new javax.swing.BoxLayout(jPanel1, javax.swing.BoxLayout.Y_AXIS));
jScrollPane1.setViewportView(jPanel1);

getContentPane().add(jScrollPane1, java.awt.BorderLayout.CENTER);

pack();
}//
//GEN-END:initComponents

/**
* @param args the command line arguments
*/
public static void main(String args[]) {
/*
* Set the Nimbus look and feel
*/
//
/*
* 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
*/
thử {
for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
phá vỡ;
}
}
} catch (ClassNotFoundException ex) {
java.util.logging.Logger.getLogger(TestFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
java.util.logging.Logger.getLogger(TestFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
java.util.logging.Logger.getLogger(TestFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
java.util.logging.Logger.getLogger(TestFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
}
//


/*
* Create and display the form
*/
java.awt.EventQueue.invokeLater(new Runnable() {

công khai void run() {
new TestFrame().setVisible(true);
}
});
}
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JPanel jPanel1;
private javax.swing.JScrollPane jScrollPane1;
// End of variables declaration//GEN-END:variables
}

1 Câu trả lời

从你的问题中不确定你是...

hoặc

hoặc

  • Ribbon (仅限 Substance 外观)

关于java - JPanel 调整大小显示另一个 JPanel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10597989/

29 4 0
Bài viết được đề xuất: java - 根据对象名称对对象列表进行排序
Bài viết được đề xuất: Java加载图像更快
Bài viết được đề xuất: java - 为什么文本节点值之间没有空格?
Bài viết được đề xuất: javascript - Rally:来自多个表的字段
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com