gpt4 book ai didi

java - ScrollPane 添加到网格布局

转载 作者:行者123 更新时间:2023-12-01 00:20:23 25 4
gpt4 key购买 nike

在我的代码中,我调用了一些项目(我的按钮名称指向不同的项目。名称和所有内容都来自数据库)我想要一个 J ScrollPane 围绕我的按钮,我该怎么办?我只想在滚动 Pane 内调用按钮。这是我的代码

import java.sql.*;
import java.util.ArrayList;

import java.util.List;

import java.awt.GridLayout;

import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JLabel;

import javax.swing.JButton;

import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;


public class AdminClass implements ActionListener {

ProjectButton[] buttons = new ProjectButton[35];

//Creating data field for unique Ids in the form of array list
ArrayList<Integer> uniqueIDList = new ArrayList<Integer>();
String[] projectNames;
int[] uniqueIds;

Connection conn1 = null;
Statement stmt1 = null;

JFrame frame = new JFrame("Admin Panel");
private JPanel panel = new JPanel();
JButton btnNewButton = new JButton("Add New Project");

public AdminClass() {

panel.setLayout(new GridLayout(10, 1));

panel.add(new JLabel("Welcome to Admin Panel"));

btnNewButton.addActionListener(this);
panel.add(btnNewButton);

panel.add(new JLabel("Existing Projects"));

conn1 = sqliteConnection.dbConnector();

try{
Class.forName("org.sqlite.JDBC");
conn1.setAutoCommit(false);
stmt1 = conn1.createStatement();
ResultSet rs1 = stmt1.executeQuery( "SELECT * FROM Project;" );

List<String> projectNameList = new ArrayList<String>();

while ( rs1.next() ){
int id = rs1.getInt("uniqueid");
String projectName = rs1.getString("name");

projectNameList.add(projectName);
uniqueIDList.add(id);
}

// Converting array list to array
projectNames = new String[projectNameList.size()];
projectNameList.toArray(projectNames);

uniqueIds = convertIntegers(uniqueIDList);


rs1.close();
stmt1.close();
conn1.close();
}
catch ( Exception e1 ) {
JOptionPane.showMessageDialog(null, e1);
}

// Adding buttons to the project
try{
for (int i = 0; i < projectNames.length; i++){
buttons[i] = new ProjectButton(projectNames[i]);
buttons[i].setId(uniqueIds[i]);

panel.add(buttons[i]);
buttons[i].addActionListener(this);

}
}
catch (Exception e2){
JOptionPane.showMessageDialog(null, e2);
}

frame.add(panel);
frame.setVisible(true);
frame.setSize(500, 500);

}

public void actionPerformed(ActionEvent e) {

for (int j = 0; j < buttons.length; j ++){
if (e.getSource() == buttons[j]){
AdminStatus sc = new AdminStatus(buttons[j].getId());
frame.dispose();
}
}

if (e.getSource() == btnNewButton){

frame.dispose();
WindowProjectAdmin wpa = new WindowProjectAdmin();

}

}

//Method to convert integar array list to integar array
public int[] convertIntegers(List<Integer> integers)
{
int[] ret = new int[integers.size()];
for (int i=0; i < ret.length; i++)
{
ret[i] = integers.get(i).intValue();
}
return ret;
}

}

这可能看起来很正常,但实际上并非如此,由于某些原因它们不可见或未在滚动条内调用。也许请编辑我的代码?

最佳答案

首先将按钮添加到它们自己的容器中,这样您就可以独立于 UI 的其余部分控制按钮的布局

    JPanel panelFullOfButtons = new JPanel();
try {
for (int i = 0; i < projectNames.length; i++) {
buttons[i] = new ProjectButton(projectNames[i]);
buttons[i].setId(uniqueIds[i]);

panelFullOfButtons.add(buttons[i]);
buttons[i].addActionListener(this);

}
} catch (Exception e2) {
JOptionPane.showMessageDialog(null, e2);
}

然后将“主”面板添加到框架的NORTH 位置,将“按钮”面板添加到CENTER

    frame.add(panel, BorderLayout.NORTH);
frame.add(new JScrollPane(panelFullOfButtons), BorderLayout.CENTER);

请注意,在这种情况下,我很想改用 JList 之类的东西。参见 How to Use Lists了解更多详情

I have done the same, can you tell me what's wrong?

// Problem #1...
JScrollPane pane = new JScrollPane();
pane.add(buttonPanel);

//...
// Problem #2...
panel.add(pane);
frame.add(panel);

这些相互竞争,移动内容并与现有内容重叠...

List of buttons

public AdminClass() {

panel.setLayout(new GridLayout(3, 1));

panel.add(new JLabel("Welcome to Admin Panel"));

btnNewButton.addActionListener(this);
panel.add(btnNewButton);

panel.add(new JLabel("Existing Projects"));

List<String> projectNameList = new ArrayList<String>();
for (int index = 0; index < 1000; index++) {
projectNameList.add("Project " + index);
}
projectNames = projectNameList.toArray(new String[0]);

// Adding buttons to the project
buttons = new JButton[projectNameList.size()];
try {
for (int i = 0; i < projectNames.length; i++) {
buttons[i] = new JButton(projectNames[i]);

btnPnl1.add(buttons[i]);
buttons[i].addActionListener(this);

}
} catch (Exception e2) {
JOptionPane.showMessageDialog(null, e2);
}

frame.add(panel, BorderLayout.NORTH);
frame.add(new JScrollPane(btnPnl1), BorderLayout.CENTER);

frame.setVisible(true);
frame.setSize(500, 500);

}

在这种情况下,我更愿意使用JList 来显示项目或使用WrapLayout。用于布置按钮

关于java - ScrollPane 添加到网格布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30292519/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com