Java 将滚动条添加到JFrame
在这段代码中,我有一个Java 将滚动条添加到JFrame,java,swing,scrollbar,Java,Swing,Scrollbar,在这段代码中,我有一个JPanel容器数组。我在JFrame上一个接一个地添加这些面板,但我的滚动条不工作 错在哪里 这是代码: import javax.swing.*; public class NewJFrame extends javax.swing.JFrame { private javax.swing.JPanel arr[] = new JPanel[100]; public NewJFrame() { initComponents();
JPanel
容器数组。我在JFrame
上一个接一个地添加这些面板,但我的滚动条不工作
错在哪里
这是代码:
import javax.swing.*;
public class NewJFrame extends javax.swing.JFrame {
private javax.swing.JPanel arr[] = new JPanel[100];
public NewJFrame() {
initComponents();
for (int i = 0; i < 5; i++) {
arr[i] = new JPanel();
arr[i].setLayout(null);
newPanel(arr[i]);
arr[i].setBounds(0, i * 375, 610, 370);
getContentPane().add(arr[i]);
}
JScrollPane scroll = new JScrollPane(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
getContentPane().add(scroll);
}
private void newPanel(JPanel panel) {
javax.swing.JLabel jLabel1;
javax.swing.JLabel jLabel2;
javax.swing.JLabel jLabel3;
javax.swing.JLabel jLabel4;
javax.swing.JLabel jLabel5;
javax.swing.JLabel lImage;
javax.swing.JPanel pInfo;
javax.swing.JPanel pImage;
pImage = new javax.swing.JPanel();
lImage = new javax.swing.JLabel();
pInfo = new javax.swing.JPanel();
jLabel1 = new javax.swing.JLabel();
jLabel2 = new javax.swing.JLabel();
jLabel3 = new javax.swing.JLabel();
jLabel4 = new javax.swing.JLabel();
jLabel5 = new javax.swing.JLabel();
pImage.setBackground(new java.awt.Color(255, 255, 255));
pImage.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
pImage.setLayout(null);
lImage.setBackground(new java.awt.Color(255, 255, 255));
lImage.setText("jLabel1");
pImage.add(lImage);
lImage.setBounds(0, 0, 280, 370);
panel.add(pImage);
pImage.setBounds(0, 0, 280, 370);
pInfo.setBackground(new java.awt.Color(255, 255, 255));
pInfo.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
pInfo.setLayout(null);
jLabel1.setFont(new java.awt.Font("Tahoma", 1, 13)); // NOI18N
jLabel1.setText("Info1:");
pInfo.add(jLabel1);
jLabel1.setBounds(10, 10, 90, 30);
jLabel2.setFont(new java.awt.Font("Tahoma", 1, 13)); // NOI18N
jLabel2.setText("Info2:");
pInfo.add(jLabel2);
jLabel2.setBounds(10, 50, 70, 30);
jLabel3.setFont(new java.awt.Font("Tahoma", 1, 13)); // NOI18N
jLabel3.setText("Info3:");
pInfo.add(jLabel3);
jLabel3.setBounds(10, 100, 34, 16);
jLabel4.setText("*************************************");
pInfo.add(jLabel4);
jLabel4.setBounds(10, 140, 300, 20);
jLabel5.setFont(new java.awt.Font("Tahoma", 1, 13)); // NOI18N
jLabel5.setText("Info4:");
pInfo.add(jLabel5);
jLabel5.setBounds(10, 160, 100, 20);
panel.add(pInfo);
pInfo.setBounds(280, 0, 330, 370);
}
@SuppressWarnings("unchecked")
private void initComponents() {
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setMaximumSize(new java.awt.Dimension(640, 700));
setMinimumSize(new java.awt.Dimension(640, 700));
setPreferredSize(new java.awt.Dimension(640, 700));
setResizable(true);
getContentPane().setLayout(null);
pack();
}// </editor-fold>
public static void main(String args[]) throws Exception {
for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new NewJFrame().setVisible(true);
}
});
}
}
import javax.swing.*;
公共类NewJFrame扩展了javax.swing.JFrame{
private javax.swing.JPanel arr[]=new JPanel[100];
公共NewJFrame(){
初始化组件();
对于(int i=0;i<5;i++){
arr[i]=新的JPanel();
arr[i].setLayout(空);
新面板(arr[i]);
arr[i].setBounds(0,i*375,610,370);
getContentPane().add(arr[i]);
}
JScrollPane scroll=新的JScrollPane(JScrollPane.VERTICAL\u滚动条\u始终,
JScrollPane.水平滚动条(根据需要);
getContentPane().add(滚动);
}
专用面板(JPanel面板){
javax.swing.JLabel jLabel1;
javax.swing.JLabel jLabel2;
javax.swing.JLabel jLabel3;
javax.swing.JLabel jLabel4;
javax.swing.JLabel jLabel5;
javax.swing.JLabel lImage;
javax.swing.JPanel pInfo;
javax.swing.JPanel pImage;
pImage=newjavax.swing.JPanel();
lImage=newjavax.swing.JLabel();
pInfo=newjavax.swing.JPanel();
jLabel1=newjavax.swing.JLabel();
jLabel2=newjavax.swing.JLabel();
jLabel3=newjavax.swing.JLabel();
jLabel4=newjavax.swing.JLabel();
jLabel5=newjavax.swing.JLabel();
setBackground(新java.awt.Color(255、255、255));
setboorder(javax.swing.BorderFactory.createLineBorder(新java.awt.Color(0,0,0));
pImage.setLayout(空);
setBackground(新java.awt.Color(255、255、255));
lImage.setText(“jLabel1”);
添加(lImage);
立根(0,0280370);
面板。添加(pImage);
立根数(0,0280370);
setBackground(新java.awt.Color(255、255、255));
setboorder(javax.swing.BorderFactory.createLineBorder(新java.awt.Color(0,0,0));
pInfo.setLayout(空);
jLabel1.setFont(新的java.awt.Font(“Tahoma”,1,13));//NOI18N
jLabel1.setText(“Info1:”);
pInfo.add(jLabel1);
jLabel1.立根(10,10,90,30);
jLabel2.setFont(新的java.awt.Font(“Tahoma”,1,13));//NOI18N
jLabel2.setText(“Info2:”);
pInfo.add(jLabel2);
jLabel2.立根(10,50,70,30);
jLabel3.setFont(新的java.awt.Font(“Tahoma”,1,13));//NOI18N
jLabel3.setText(“Info3:”);
pInfo.add(jLabel3);
jLabel3.立根(10100,34,16);
jLabel4.setText(“*******************************************”);
pInfo.add(jLabel4);
jLabel4.立根(10140300,20);
jLabel5.setFont(新的java.awt.Font(“Tahoma”,1,13));//NOI18N
jLabel5.setText(“Info4:”);
pInfo.add(jLabel5);
jLabel5.立根(10、160、100、20);
面板。添加(pInfo);
针叶立根(280,030370);
}
@抑制警告(“未选中”)
私有组件(){
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setMaximumSize(新java.awt.Dimension(640700));
setMinimumSize(新java.awt.Dimension(640700));
setPreferredSize(新java.awt.Dimension(640700));
可设置大小(真);
getContentPane().setLayout(null);
包装();
}//
公共静态void main(字符串args[])引发异常{
for(javax.swing.UIManager.LookAndFeelInfo:javax.swing.UIManager.getInstalledLookAndFeels()){
if(“Nimbus”.equals(info.getName())){
setLookAndFeel(info.getClassName());
打破
}
}
invokeLater(new Runnable()){
公开募捐{
新建NewJFrame().setVisible(true);
}
});
}
}
您创建了一个JScrollPane
并将其添加到JFrame
中,但从未向JScrollPane
中添加任何内容--JScrollPane基本上是一个可以添加更多组件的容器。所有东西都应该放在那里。不要使用空布局和setBounds
,有。@johnny94是的,空布局一开始似乎更容易。但是GUI越复杂,维护空布局就越困难,布局管理器实际上也更容易使用。它们还根据窗口大小布置构件。阅读我链接的教程绝对值得。@LukasRotter重新编辑:如果有名为panel
(没有)的属性,面板应该是panel
s。那个符号只用于代码。@AndrewThompson对不起,我以为这是你的本意。我还刚刚意识到OP实际上在“panel”之后添加了“panel”,这就是为什么它出现在“panels on
JFrame”上的原因。您创建了一个JScrollPane
并将其添加到JFrame
中,但您从未在JScrollPane
中添加任何内容--JScrollPane基本上是一个可以添加更多组件的容器。所有东西都应该放在那里。不要使用空布局和setBounds
,有。@johnny94是的,空布局一开始似乎更容易。但是GUI越复杂,维护空布局就越困难,布局管理器实际上也更容易使用。它们还根据窗口大小布置构件。阅读我链接的教程绝对值得。@LukasRotter重新编辑:如果有名为panel
(没有)的属性,面板应该是panel
s。那个符号只用于代码。@AndrewThompson对不起,我以为这是你的本意。我还刚刚意识到OP实际上在“panel”之后添加了“panel”,这就是为什么它被命名为“panels on
JFrame”。